WisFaq!

\require{AMSmath} geprint op vrijdag 19 april 2024

Punt berekenen na een bepaalde afstand op een lijn

Ik heb een lijn AB, met bijvoorbeeld de coordinaten: A = (2, 2) en B = (10, 10). Nu wil ik die lijn eigenlijk aan beide kanten 'inkorten' met een waarde x (bijvoorbeeld 1.414). Nu zou in dit voorbeeld de nieuwe lijn lopen van (3,3) naar (9,9), maar hoe bereken je dat?

Bij voorkeur zo min mogelijk, of liever geen gebruik van sin, cos, tan , worteltrekken, machten etc omdat dit onderdeel is van een pathfinding systeem en deze berekening moet honderden keren per frame kunnen worden uitgevoerd.

Dennis
17-6-2009

Antwoord

Helemaal zonder worteltrekken zal het niet gaan.
Maar als de lijn dezelfde richting houdt in opeenvolgende frames hoef je dat worteltrekken maar één keer te doen:
Noem A(a1,a2) en B(b1,b2)
Bereken nu de richtingsvector (rv1,rv2)=(b1-a1,b2-a2)
Bereken de lengte len van de richtingsvector: len=Ö(rv1·rv1+rv2·rv2)
Bereken ook delta=x/len.

Als je nu aan beide zijden een stukje ter lengte x wilt aftrekken dan geldt:

a1nieuw=a1oud+delta·rv1
a2nieuw=a2oud+delta·rv2

b1nieuw=b1oud-delta·rv1
b2nieuw=b2oud-delta·rv2

Als nu in een volgend frame dezefde punten weer een stukje moeten worden veranderd hoef je alleen de berekening delta=x/len opnieuw uit te voeren en de nieuwe (a1,a2) en (b1,b2) uit te rekenen.
Dus moet je dan per puntenpaar wel ruimte reseveren voor rv1, rv2 en len.

Op zich kan dat weer een probleem geven voor wat betreft geheugenruimte.
Je kunt dan de volgende strategie volgen:
Bereken het midden (m1,m2) van AB: m1=(a1+b1)/2 en m2=(a2+b2)/2.
rv1 en rv2 zijn weer (b1-a1) resp (b2-a2).
dan
a1=m1-t·rv1
a2=m2-t·rv2
b1=m1+t·rv1
b2=m2+t·rv2
In de startsituatie geldt dan t=0.5
Met len=Ö(rv1·rv1+rv2·rv2) geldt dan
tnieuw=toud-x/len.
Per lijnstukje levert dat dus op dat je moet opslaan: m1,m2,rv1,rv2, t en len. Je kunt dan de nieuwe t berekenen en (a1,a2) en (b1,b2) herberekenen.

hk
17-6-2009


© 2001-2024 WisFaq
WisFaq - de digitale vraagbaak voor het wiskunde onderwijs - http://www.wisfaq.nl

#59655 - Ruimtemeetkunde - Student hbo