\require{AMSmath}
WisFaq - de digitale vraagbaak voor wiskunde en wiskunde onderwijs


Printen

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
Student hbo - woensdag 17 juni 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.


woensdag 17 juni 2009

 Re: Punt berekenen na een bepaalde afstand op een lijn 

©2001-2022 WisFaq