我正在制作一个程序,其中许多奇怪的形状被绘制到画布上。现在我正在尝试实施最后一个,也是最难的一个。
在这个特殊形状中,我需要一种方法来找到线条击中形状的位置(在第2个画布上)。下图是我现在所拥有的一个例子。
黑点是我所熟知的点(我也有三个空心圆的中心位置和这些圆的半径)。三条外线中的每条线都需要朝向中心点的线,在它击中圆的点处结束。这种形状可以转90度,180度或270度。
形状应如下所示:
如果您需要任何其他信息,请在评论中询问我。我不擅长数学,所以请温柔,谢谢!
答案 0 :(得分:1)
如果 A 和 B 是形成一条线的点,那么您可以使用坐标描述该线上的任何点:
x = t · A x +(1- t ) ·的乙<子> X 子> 的
y = t · A y +(1- t )·乙<子>ý子> 的
0≤ t ≤1
您还可以将中心 M 和半径 r 的圆描述为
( x - M x ) 2 +( y - < i> M y ) 2 = r 2
所以从线的方程中取 x 和 y ,然后将它们插入圆的方程中。您在 t 中获得二次方程。它的两个解决方案描述了直线和圆之间的两个交点。在您的示例中,只有其中一个位于线段上,即满足0≤ t ≤1。另一个描述了段的扩展超过其端点的点。将 t 的正确值返回到线的方程,然后获得交点的 x 和 y 坐标。 / p>
如果您不知道要与给定线相交的哪个圆,则将所有三个相交,然后选择最合适的点。可能这是最接近线段外部起点的点。在两个交叉点都位于段上的情况下也是如此。