|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
apophis
Joined: 07 Dec 2007 Posts: 3 Location: Tukums
|
Posted: Thu Dec 27, 2007 9:51 pm Post subject: Attālums starp nogriežņiem |
|
Kā aprēķināt attālumu starp nogriežņiem, ja zināmi to sākumpunktu vektori v1, v2 un v3, v4 ? _________________ Es |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Thu Dec 27, 2007 10:09 pm Post subject: |
|
Ja 2d, tad visvienkāršāk droši vien ir atrast krustpunktu, kurā krustojas abas taisnes uz kurām ir šie nogriežņi. Un tad atrast divus tuvākos punktus uz katra no nogriežņiem, kas ir vistuvāk šim krustpunktam. Ja taisnes ir paralēlas, tad attālums ir perpendikulāra nogriežņa garums starp abām taisnēm.
Iekš 3d vajadzētu meklēt īsāko nogriezni starp tām taisnēm un tad šī nogriežņa galpunktus pastiept uz to tuvāko doto nogriežņu galapunktu pusi. |
|
Back to top |
|
|
apophis
Joined: 07 Dec 2007 Posts: 3 Location: Tukums
|
Posted: Thu Dec 27, 2007 10:22 pm Post subject: |
|
Jā, aizmirsu piebilst, ka 3D.
Īsāko izdevās atrast, bet problēmas ir ar galapunktiem.
Domāju, ka vajadzētu atrast savienotājnogriežņa galapunktus un
pārbaudīt, vai tie pieder dotajiem nogriežņiem, bet kā?
Šeit funkcijas:
Code: |
function LineLineDistance(v1,v2,v3,v4:TD3DVector):double;
var
u,v,w,x:TD3DVector;
d,d1,d2:TD3DValue;
begin
u:=VectorSub(v2,v1);
v:=VectorSub(v4,v3);
w:=VectorSub(v3,v1);
x:=VectorCrossProduct(u,v);
d1:=abs(VectorDotProduct(w,x));
d2:=VectorMagnitude(x);
if d2<>0 then begin //liinijas nav paraleeleas
d:=d1/d2;
LineLineDistance:=d;
exit;
end;
d:=PointLineDistance(v1,v3,v4);
LineLineDistance:=d;
end;
function PointLineDistance(p0,p1,p2:TD3DVector):double;
var
u,w,x:TD3DVector;
d:TD3DValue;
begin
u:=VectorSub(p2,p1);
w:=VectorSub(p0,p1);
x:=VectorCrossProduct(u,w);
d:=VectorMagnitude(x)/VectorMagnitude(u);
PointLineDistance:=d;
end;
|
_________________ Es |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Thu Dec 27, 2007 10:41 pm Post subject: |
|
Ar to nepietiks. Tas savienotājnogrieznis var savienot taisnes punktos, kuri nepieder dotajiem nogriežņiem.
To vai punkts x ir uz nogriežņa uzdota ar punktiem a un b var, piemēram, sekojoši - ja eksistē tāds t=0..1, ka x = a + (b-a)*t, tad x ir starp a un b. |
|
Back to top |
|
|
apophis
Joined: 07 Dec 2007 Posts: 3 Location: Tukums
|
Posted: Fri Dec 28, 2007 1:26 pm Post subject: |
|
Kā var aprēķināt savienotajnogirežņa galapunktu koordinātas? _________________ Es |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|