这是基本的图形几何和/或触发,我觉得它很愚蠢,但我不记得这是怎么回事.所以:
我想计算位于#1线上某处的点(x',y'),这样当与#2点连接时,会创建一条到第一行的新垂线.
谢谢.
您可以考虑先一般点找到那个点(x, y)
,从沿线(x1, y1)
到(x2, y2)
:
x = x1 + t*(x2 - x1)
y = y1 + t*(y2 - y1)
Run Code Online (Sandbox Code Playgroud)
并计算从这一点开始的(平方)距离 (xp, yp)
E = (x - xp)**2 + (y - yp)**2
Run Code Online (Sandbox Code Playgroud)
代替x
和y
给出的定义
E = (x1 + t*(x2 - x1) - xp)**2 +
(y1 + t*(y2 - y1) - yp)**2
Run Code Online (Sandbox Code Playgroud)
然后找到这个距离而变化的最小t
我们得出E
相对于t
dE/dt = 2*(x1 + t*(x2 - x1) - xp)*(x2 - x1) +
2*(y1 + t*(y2 - y1) - yp)*(y2 - y1)
Run Code Online (Sandbox Code Playgroud)
经过一些计算得出
dE/dt = 2*((x1 - xp)*(x2 - x1) + (y1 - yp)*(y2 - y1) +
t*((x2 - x1)**2 + (y1 - y2)**2))
Run Code Online (Sandbox Code Playgroud)
当这个导数为零时,我们得到一个明确的等式 t
t = ((xp - x1)*(x2 - x1) + (yp - y1)*(y2 - y1)) /
((x2 - x1)**2 + (y2 - y1)**2)
Run Code Online (Sandbox Code Playgroud)
所以可以使用t
定义中的值来计算最终点(x, y)
.
使用矢量符号这与Gareth提出的完全相同的公式...
t = <p - p1, p2 - p1> / <p2 - p1, p2 - p1>
Run Code Online (Sandbox Code Playgroud)
其中符号<a, b>
表示点积运算ax*bx + ay*by
.
还要注意,相同的公式在n维空间中起作用.
对于所有那些寻找使用向量的具体例子的可怜的灵魂......在这里我以加雷斯的答案为基础。
您有一个从 p 到 r(从 0,0 到 50,-50)的向量,以及位于 (50, 0) 的另一个点 q。q 和从 p 到 r 的向量的直角交集是 { x: 25.y: -25 },并通过以下代码导出。
const p = [0, 0];
const r = [50, -50];
const q = [50, 0];
const l = math.add(p, r);
const m = math.dot(math.subtract(q, p), r) / math.dot(r, r);
console.log('intersecting point', math.multiply(l, m));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/5.1.2/math.js"></script>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3079 次 |
最近记录: |