Re: Finding a shorter form for coplanar point in 3D space
- To: mathgroup at smc.vnet.net
- Subject: [mg65168] Re: [mg65135] Finding a shorter form for coplanar point in 3D space
- From: "Carl K. Woll" <carlw at wolfram.com>
- Date: Wed, 15 Mar 2006 23:59:59 -0500 (EST)
- References: <200603151129.GAA23276@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
János wrote: > Hi, > > Let say I have a Line in 3D with points A(xa,ya,0) and B(xb,yb,zb) > and the distance between the two points in space is "l" -small "L". > Then I move this line into another position where the end points will > be C(xc,yc,0) and D(xd,yd,zd). The move is such that A,B and D are > collinear, A and C remain in the xy-plane and A,B,C and D are > coplanar. The distance between C and D are also "l". Let's say I > know the coordinates of A, B, and C and I am looking for D(xd,yd,zd). > Why wouldn't you define point D as {xa+(xb-xa)t,ya+(yb-ya)t,zb t} Then collinearity of D with A and B is guaranteed, and you only have one unknown to solve for instead of 3. > From the condition of collinearity of A,B,C is coming that the > determinant of the matrix created from the coordinates has to vanish > so my first equation eqn1: > > In[1]:= > m = {{xa, ya, 0}, {xb, yb, > zb}, {xd, yd, zd}} > > In[2]:= > eqn1 = Det[m] == 0 > Out[2]= > xd*ya*zb - xa*yd*zb - > xb*ya*zd + xa*yb*zd == 0 > This equation is unnecessary when using the parametric form of D I gave above. > The second equation is coming from the fact that the distance between > C and D is "l": > > In[11]:= > eqn2 = (xc - xd)^2 + > (yc - yd)^2 + zd^2 == l^2 > With one unknown, this is the only equation you need. Defining the points: pa = {xa, ya, 0}; pb = {xb, yb, zb}; pc = {xc, yc, 0}; pd = {xa + (xb - xa) t, ya + (yb - ya) t, zb t}; Solve the resulting distance equation, where I suppress the output as its a little messy: In[129]:= Solve[(pb - pa) . (pb - pa) == (pd - pc) . (pd - pc), t]; We get two solutions, as expected for a quadratic equation in t. We can obtain the coordinates of pd by substituting this value of t into it. Perhaps I'm misunderstanding your problem, as you state that you expected 16 solutions. Carl Woll Wolfram Research > The third equation is given by similar triangles. Let say if the > vertical projection of D down to the xy-plane is Dxy and the same for > B is Bxy, then BBxy:BxyA == DDxy:DxyA. In coordinates: > > eqn3 = zb/Sqrt[(xa - xb)^2 + > (ya - yb)^2] == > zd/Sqrt[(xa - xd)^2 + > (ya - yd)^2] > > Well, if I put all three into Solve, like this innocent looking > sol=Solve[{eqn1,eqn2,eqn3},{xd,yd,zd}], Solve will take my G5 duo > into the bushes forever. It looks to me that I should have up to max > 16 solutions for {xd,yd,zd}. > > If I try to be cleaver and solve eqn3 for zd: > > In[22]:= > solzd = Solve[eqn3, zd] > Out[22]= > {{zd -> (Sqrt[(xa - xd)^2 + > (ya - yd)^2]*zb)/ > Sqrt[(xa - xb)^2 + > (ya - yb)^2]}} > > and punch it back to eqn1 and eqn2 then I get > > In[8]:= > eqn1 > Out[8]= > xd*ya*zb - > (xb*ya*Sqrt[(xa - xd)^2 + > (ya - yd)^2]*zb)/ > Sqrt[(xa - xb)^2 + > (ya - yb)^2] + > (xa*yb*Sqrt[(xa - xd)^2 + > (ya - yd)^2]*zb)/ > Sqrt[(xa - xb)^2 + > (ya - yb)^2] - > xa*yd*zb == 0 > > and > > In[13]:= > eqn2 > Out[13]= > (xc - xd)^2 + (yc - yd)^2 + > (((xa - xd)^2 + (ya - yd)^ > 2)*zb^2)/ > ((xa - xb)^2 + (ya - yb)^ > 2) == l^2 > > Now these two still take my G5 Duo to the laundry if I try Solve > [{eqn1,eqn2},{xd,yd}]. > The next step to do is to solve eqn1 for yd: > > In[22]:= > solyd = Flatten[Solve[eqn1, > yd]] > Out[22]= > {yd -> ((-xb)*ya + xd*ya + > xa*yb - xd*yb)/ > (xa - xb), yd -> > (xa^2*xb*ya + xa^2*xd*ya - > 2*xa*xb*xd*ya + > xb*ya^3 + xd*ya^3 - > xa^3*yb + xa^2*xd*yb - > xa*ya^2*yb - xd*ya^2*yb)/ > (xa^3 - xa^2*xb + > xa*ya^2 + xb*ya^2 - > 2*xa*ya*yb)} > > and punch it back to eqn2. Eqn2 will become two equations, eqn21 and > eqn22. > > In[28]:= > eqn21 = eqn2 /. yd -> > solyd[[1,2]] > Out[28]= > (xc - xd)^2 + > (-(((-xb)*ya + xd*ya + > xa*yb - xd*yb)/ > (xa - xb)) + yc)^2 + > (((xa - xd)^2 + > (ya - ((-xb)*ya + > xd*ya + xa*yb - > xd*yb)/(xa - xb))^ > 2)*zb^2)/ > ((xa - xb)^2 + (ya - yb)^ > 2) == l^2 > > and > > In[33]:= > eqn22 = eqn2 /. yd -> > solyd[[2,2]] > Out[33]= > (xc - xd)^2 + > (-((xa^2*xb*ya + xa^2*xd* > ya - 2*xa*xb*xd*ya + > xb*ya^3 + xd*ya^3 - > xa^3*yb + xa^2*xd* > yb - xa*ya^2*yb - > xd*ya^2*yb)/(xa^3 - > xa^2*xb + xa*ya^2 + > xb*ya^2 - 2*xa*ya* > yb)) + yc)^2 + > (((xa - xd)^2 + > (ya - (xa^2*xb*ya + > xa^2*xd*ya - > 2*xa*xb*xd*ya + > xb*ya^3 + xd*ya^3 - > xa^3*yb + xa^2*xd* > yb - xa*ya^2*yb - > xd*ya^2*yb)/ > (xa^3 - xa^2*xb + > xa*ya^2 + xb*ya^2 - > 2*xa*ya*yb))^2)* > zb^2)/((xa - xb)^2 + > (ya - yb)^2) == l^2 > > > Solving these two is now a breeze for the G5 duo and both give two > solutions. The third and fourth solutions for xd are quite a few > pages long. > > I am wondering if there is another way - like using cylindrical > coordinate system or using Reduce - to get shorter looking > solutions. Does Solve do a FullSimplify on its findings ? > > Thanks ahead, > > J�os > > > ---------------------------------------------- > Trying to argue with a politician is like lifting up the head of a > corpse. > (S. Lem: His Master Voice)
- References:
- Finding a shorter form for coplanar point in 3D space
- From: János <janos.lobb@yale.edu>
- Finding a shorter form for coplanar point in 3D space