gpt4 book ai didi

c - 如何找出C中两条共面线的交点

转载 作者:太空狗 更新时间:2023-10-29 17:02:30 24 4
gpt4 key购买 nike

我有两条位于同一平面上的 3D 线。 line1 由一个点 (x1, y1, z1) 及其方向 vector (a1, b1, c1) 定义,而 line2 由一个点 (x2, y2, z2) 及其方向 vector (a2, b2, c2) 定义。那么两条直线的参数方程为

x = x1 + a1*t;         x = x2 + a2*s;
y = y1 + b1*t; y = y2 + b2*s;
z = z1 + c1*t; z = z2 + c2*s;

如果两个方向 vector 都不为零,我们可以很容易地找到相交节点的位置,方法是使上面等式的右边相等并求解ts 来自三个中的两个。但是,a1 b1 c1 a2 b2 c2 可能并非全为非零,因此我无法以相同的方式求解这些方程。我目前的想法是逐案处理这个问题,比如

case1: a1 = 0, others are nonzero
case2: a2 = 0, others are nonzero
case3: b1 = 0, others are nonzero
...

但是这样一来案例太多了,实现起来会很乱。有什么好的方法可以解决这个问题吗?任何引用?非常感谢!

最佳答案

将其视为 vector 方程更为实用。点 . 是标量积,A,n,B,m 是描述直线的 vector 。点 A 位于方向 n 的第一条线上。方向已标准化:n.n=1m.m=1。交点 C 是这样的:

 C=A+nt=B+ms

其中 ts 是要计算的标量参数。

因此 (.n) :

A.n+ t=B.n+m.n s
t= (B-A).n+m.n s

和(.m):

 A.m+n.m t=B.m+ s
A.m+n.m (B-A).n+(m.n)^2 s=B.m+ s
n.m(B-A).n+(A-B).m=(1-(m.n)^2).s

由于 n.n=m.m=1 并且 n 和 m 没有对齐,(m.n)^2<1 :

 s=[n.m(B-A).n+(A-B).m]/[1-(m.n)^2]
t= (B-A).n+m.n s

关于c - 如何找出C中两条共面线的交点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22544492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com