求助:空间中的两条直线的最近点
<p>空间中的两条直线pt1.pt2和pt3.pt4交叉而不相交,如何求出直线上与另一直线最近的点?</p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">给出一个思路</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"><font face="Times New Roman"> </font></span>设2直线的矢量分别为</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman"><span style="mso-spacerun: yes;"> v1=pt1 - pt2</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman"><span style="mso-spacerun: yes;"> v2=pt3 - pt4</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman">1. </font>由<font face="Times New Roman">v1</font>和<font face="Times New Roman">v2</font>决定的平面法线</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman"><span style="mso-spacerun: yes;"> vn = v1 x v2 (</font></span>外积<font face="Times New Roman">)</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman">2. </font>过<font face="Times New Roman">v1</font>且法线<font face="Times New Roman">vn</font>的平面方程为</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman"><span style="mso-spacerun: yes;"> vn(1)(x-pt1(1))+ vn(2)(y-pt1(2))+ vn(3)(z-pt1(3))=0</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">整理后</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman"><span style="mso-spacerun: yes;"> vn(1) x + vn(2) y + vn (3) z - ( vn(1) pt1(1)+ vn(2) pt1(2)+ vn(3) pt1(3 ) ) =0</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><p><font face="Times New Roman"> </font></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman">3. v1</font>与<font face="Times New Roman">v2</font>不相交的话,<font face="Times New Roman">v2</font>必不在上面的平面内</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman">v2</font>的端点在上面的平面上的投影点分别为</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman"><span style="mso-spacerun: yes;"> pt3 --> w1</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman"><span style="mso-spacerun: yes;"> pt4 --> w2</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">【点在平面上的投影点的求法:</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">设点<font face="Times New Roman">P(P1,P2,P3) </font>在<font face="Times New Roman"></font>平面<font face="Times New Roman"> Ax + By + Cz + D = 0 </font>上的投影点<font face="Times New Roman">Q(Q1,Q2,Q3)</font>的求法<font face="Times New Roman">.</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">设<font face="Times New Roman">PQ</font>的距离为<font face="Times New Roman">t , </font>直线<font face="Times New Roman">PQ</font>与平面的法线<font face="Times New Roman">N(A,B,C)</font>平行<font face="Times New Roman">,</font>所以,</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman">Q=P + t N</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">即<font face="Times New Roman"> Q1 = P1 + At</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman"><span style="mso-spacerun: yes;"> Q2 = P2 + Bt</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman"><span style="mso-spacerun: yes;"> Q3 = P3 + Ct</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">由于<font face="Times New Roman">Q</font>在平面上<font face="Times New Roman">,</font>所以,</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman"><span style="mso-spacerun: yes;"> A P1 + A</span><sup>2</sup>t + B P2 + B<sup>2</sup>t + C P3 + C<sup>2</sup>t + D = 0</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">整理得</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman"><span style="mso-spacerun: yes;"> t = - (A P1 + B P2 + C P3 + D) / (A</span><sup>2</sup> + B<sup>2</sup> + C<sup>2</sup>)</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">因此<font face="Times New Roman">, </font>投影点<font face="Times New Roman">Q</font>的成分为</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman"><span style="mso-spacerun: yes;"> Q1 = P1 - A (A P1 + B P2 + C P3 + D) / (A</span><sup>2</sup> + B<sup>2</sup> + C<sup>2</sup>)</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman"><span style="mso-spacerun: yes;"> Q2 = P2 - B (A P1 + B P2 + C P3 + D) / (A</span><sup>2</sup> + B<sup>2</sup> + C<sup>2</sup>)</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman"><span style="mso-spacerun: yes;"> Q3 = P3 - C (A P1 + B P2 + C P3 + D) / (A</span><sup>2</sup> + B<sup>2</sup> + C<sup>2</sup>)</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">】</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><p><font face="Times New Roman"> </font></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Times New Roman">4.</font>结论:</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"><font face="Times New Roman"> </font></span>这样就可以求出<font face="Times New Roman">v1(pt1,pt2)</font>与<font face="Times New Roman">v2</font>在上面的平面上的投影线<font face="Times New Roman">(w1,w2)</font>的交点<font face="Times New Roman">G, </font>过<font face="Times New Roman">G</font>点做直线<font face="Times New Roman">v2</font>的垂足<font face="Times New Roman">H (</font>求法在本论坛公布过<font face="Times New Roman">), </font>则线段<font face="Times New Roman">GH</font>的长度就是所要求的距离;如果没有交点<font face="Times New Roman">, </font>说明<font face="Times New Roman">v1</font>和<font face="Times New Roman">v2</font>是平行直线<font face="Times New Roman">, </font>则过直线<font face="Times New Roman">v1</font>上任意一点<font face="Times New Roman">P, </font>做<font face="Times New Roman">v2</font>的垂足<font face="Times New Roman">Q, </font>则线段<font face="Times New Roman">PQ</font>的长度就是所要求的距离<font face="Times New Roman">.</font></p> <font face="Verdana" color="#61b713"><strong>多谢Jkbanana师傅的指点,目前对于法面等理解有限,路比较远,想到土的办法:在其中一条线上分割成若干个点,比较各点与另一条线的垂线长度,取最短的,依此类推,经若干次运算得出一结论,不知行不行?</strong></font>
页:
[1]