空间平行线算法(高分相送)

zyzhangyong 2004-01-09 09:59:46
已知空间一条直线 (x1,y1,z1) (x2,y2,z2) 求 于该直线距离为d的平行线
求此算法 高分相送
...全文
140 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzwu 2004-01-11
  • 打赏
  • 举报
回复
是一个底面圆的半径=d圆柱面。为了得到所求圆柱面,最简单的方法是先构造出一个法线平行于Z轴,中心与z轴重合,底圆半径=d的圆柱面:

x*x + y*y = d*d

将此圆柱面,经过旋转,平移,就可得到所要的那个圆柱面了。

旋转,平移变换的方程是容易推导的。

dengsf 2004-01-11
  • 打赏
  • 举报
回复
楼上的老大都说的正确。

不过用参数来表示,应该相对比较容易用代码实现。
过两点的直线的参数方程为:
p(tθ) = (1-t) (p1θ) + t (p2θ) ( t属于R )。
p(tθ)就是某条直线上的某个点(看了下面就知道这样写的意义了)。
p1θ,p2θ分别是跟所给定的直线距离为d的某条直线上的两点,p1θ,p2θ有无限多个,问题在于求出 p1θ,p2θ的参数式。

过点 p1且跟直线p1p2垂直的平面上,以 p1为圆心,距离为 d 的圆,也可以看成由如下过程获得:
1:以原点为圆心,在YOZ上作一圆,半径为 d。
2:将该圆绕 Y 轴旋转 ALPHA 度,再绕 Z轴旋转 BETA 度。
ALPHA是“向量p1p2” 在 XOZ 上的投影跟 X轴正向的夹角,
BETA是“向量p1p2”在XOY上的投影跟 X轴正向 的夹角。
3:在将该圆的圆心从(0,0,0)平移到 p1(x1,y1,z1)处。

步骤 1 的圆上的点可表示为:
x = 0;
y = d cosθ
z = d sinθ
(θ是参数,在[0,2π)内变动)

步骤 2 的旋转过程可以用如下运算获得:
/ \ / \ / \ / | x'| |cosBETA -sinBETA 0 || cosALPHA 0 -sinALPHA || x |
| y'| = |sinBETA cosBETA 0 || 0 1 0 || y |
| z'| | 0 0 1 || sinALPHA 0 cosALPHA || z |
\ / \ / \ / \ /
ALPHA,BETA的值很容易通过 向量的点积 等运算获得,这里略去。

步骤 3 就是简单的加法了。

对于给定 p1,p2,ALPHA,BETA都是固定的,
所以经过上述 3 步运算后得出的是以θ为参数的式子,
第 3 步平移到 p1的得出 p1θ的参数式;
平移到 p2 得出 p2θ的参数式。
寻开心 2004-01-09
  • 打赏
  • 举报
回复
sorry, 过Po点平行直线方程写错了。
应该是分子上面的P1都改为Po
寻开心 2004-01-09
  • 打赏
  • 举报
回复
很多啊。
使用向量计算,假定直线是由两个点确定的,分别是P1(x1, y1, z1), P2(x2, y2, z2)
则距离直线距离为d的点Po必须满足下面条件
|(Po-P1)×(P2-P1)|/|P2-P1| = d
这个表达式的结果就是圆柱曲面的方程。

经过Po点平行已知直线的方程就是:
P.x-P1.x P.y - P1.y P.z - P1.z
--------- = ------------- = -------------
P2.x-P1.x P2.y- P1.y P2.z - P1.z

实际上全部解的集合就是前面的那个圆柱曲面
hxb74 2004-01-09
  • 打赏
  • 举报
回复
得补一阵空间几何了
只知道先得求出和这条直线垂直的平面,然后求出在此平面上与此直线距离为D的点,再求过此点并且向量与原直线相同的直线。不过最后得到的是一个柱面,就是有无数个解。

直线向量就是(x2-x1,y2-y1,z2-z1),这也是垂直平面的法向量。

33,029

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧