dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Attālums starp nogriežņiem

 
dev.gamez.lv Forum Index -> Iesācējiem
View previous topic :: View next topic  
Author Message
apophis



Joined: 07 Dec 2007
Posts: 3
Location: Tukums

PostPosted: 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
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
apophis



Joined: 07 Dec 2007
Posts: 3
Location: Tukums

PostPosted: 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
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
apophis



Joined: 07 Dec 2007
Posts: 3
Location: Tukums

PostPosted: Fri Dec 28, 2007 1:26 pm    Post subject:

Kā var aprēķināt savienotajnogirežņa galapunktu koordinātas?
_________________
Es
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Fri Dec 28, 2007 1:35 pm    Post subject:

Pilns internets ar formulām:
http://www.google.com/search?q=shortest+line+between+two+lines
http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline3d/ (Pa un Pb vērtības)
http://www.softsurfer.com/Archive/algorithm_0106/algorithm_0106.htm (sc un tc vērtības)
Back to top
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> Iesācējiem All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
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