McG*_*Gin 21 algorithm geometry
给定一个点(x1,y1)和一个线的方程(y = mx + c),我需要一些伪代码来确定点(x2,y2),它是整个线上第一个点的反射.花了大约一个小时试图找出它没有运气!
请参阅此处以获取可视化 - http://www.analyzemath.com/Geometry/Reflection/Reflection.html
Il-*_*ima 35
好的,我打算给你一个食谱方法来做到这一点.如果你对我如何得出它感兴趣,请告诉我,我会解释它.
给定(x1, y1)
和一条线y = mx + c
我们想要在线上(x2, y2)
反映的点.
组 d:= (x1 + (y1 - c)*m)/(1 + m^2)
然后 x2 = 2*d - x1
和 y2 = 2*d*m - y1 + 2*c
Car*_*ger 20
这是Il-Bhima解决方案的简单解释.诀窍是要注意你想要的是在线上正交投影该点,将其移动那么多,然后再次向同一方向移动它.
对于这些类型的问题,使用稍微冗余的线表示更容易.而不是y = m x + b
,让我们通过线上的点p
和d
线的方向上的矢量来表示线.让我们称这一点p = (0, b)
,向量d = (1, m)
,你的输入点将是p1
.上线的投影点会pl
和你的输出点p2
,那么,是p1 + 2 * (pl - p1) = 2 * pl - p1
这里你需要的公式是向量v
投影到一条线上,该线穿过方向的原点d
.它由下式给出d * <v, d> / <d, d>
其中<a, b>
的两个向量的内积.
要了解pl
,我们有那么该行通过减去经过原点移动整个问题p
的p1
,使用上面的公式,并移回.然后,pl = p + (d * <p - p1, d> / <d, d>)
那么pl_x = p_x + (b * p1_x) / (1 + m * m)
,pl_y = p_y + (m * p1_x) / (1 + m * m)
然后p2 = 2 * pl - p1
用来获取最终值.