math - 找到两条 3D 线的二等分
问题描述
我想计算两条具有相交点的 3D 线的二等分。这些线是由一个点和一个方向向量定义的共线线。我怎样才能找到它们二等分的两条线的方程?
解决方案
A + t * dA, B + s * dB
让线定义A, B
为基点和dA, dB
归一化方向向量。
如果保证线有交点,可以使用点积方法(改编自斜线最小距离算法)找到:
u = A - B
b = dot(dA, dB)
if abs(b) == 1: # better check with some tolerance
lines are parallel
d = dot(dA, u)
e = dot(dB, u)
t_intersect = (b * e - d) / (1 - b * b)
P = A + t_intersect * dA
现在关于平分线:
bis1 = P + v * normalized(dA + dB)
bis2 = P + v * normalized(dA - dB)
快速检查 2D 案例
k = Sqrt(1/5)
A = (3,1) dA = (-k,2k)
B = (1,1) dB = (k,2k)
u = (2,0)
b = -k^2+4k2 = 3k^2=3/5
d = -2k e = 2k
t = (b * e - d) / (1 - b * b) =
(6/5*k+2*k) / (16/25) = 16/5*k * 25/16 = 5*k
Px = 3 - 5*k^2 = 2
Py = 1 + 10k^2 = 3
normalized(dA+dB=(0,4k)) = (0,1)
normalized(dA-dB=(-2k,0)) = (-1,0)
推荐阅读
- c++ - 在 C++ 中通过零扩展将 char 转换为 int
- sql - 查询位于另一列的变量 + 或 1 内的列
- javascript - 为什么我的变量在反应的构造函数之外未定义?
- node.js - MongoError:BSONObj 超过了最大嵌套对象深度:200
- c++ - 如何从另一个类 LaunchCharacter
- python-3.x - 如何解决“logits 和 labels 必须具有相同的第一维”错误
- android - RecyclerView 仅在特定视图触摸时滚动
- typo3 - 遮罩流体 ViewHelper 不渲染它
- r - 正则表达式替换 R 中字符串的部分/组
- cmd - 运行“net user”user“/domain”命令并以经典 asp 读取结果