首页 > 解决方案 > 查找两条 3d 线段的公共端点

问题描述

所以我有两个 3d 线段 A 和 B 唯一给定的是两个线段的起源和它们的长度。我需要以它们在同一位置结束的方式来定位两条线段。前任:

point3d common_end_position;
bool result= intersect_line_segments(
{0, 0, 0},              // position_0
2.0,                    // length_0
{2, 0, 0},              // position_1
2.0,                    // length_1
{0, 0, 1},              // hint_direction
&common_end_position);  

该函数应返回 true,公共结束位置为 {1, 0, 1.7321} 如果它们不能定向以便它们在同一端点结束,则该函数将返回 false

标签: c++mathline-segment

解决方案


设位置是C1C2,差向量是 D = C2-C1,距离是d = |D|,长度是rR

如果或P_d > R + rd < abs(R-r)

否则 on 的P投影C1C2有长度

x = (d^2 + R^2 - r^2) / (2d)

在此处输入图像描述

数学世界页面

P距离C1C2

 y = sqrt(R^2-x^2)

如果保证提示向量H垂直于D,那么剩下的就很简单了:

1)获取归一化向量ud = D / d
2)找到投影点P' = C1 + ud * x
3)添加垂直向量P = P' + H * y(假设单位H向量)

如果H可能不垂直(但不平行于C1C2!)然后找到

H' = ud x (H x ud)

使用两个向量乘法并H'改为使用。


推荐阅读