1

我正在制作一个程序,其中许多奇怪的形状被绘制到画布上。现在我正在尝试实施最后一个,也是最难的一个。

在这个特定的形状中,我需要一种方法来找到线条撞击形状的位置(在 2d 画布上)。下图是我现在拥有的示例。

描述1

黑点是我知道的点(我也有三个空心圆的中心位置和这些圆的半径)。三条外线中的每一条都需要一条朝向中心点的线,在它与圆相交的点处结束。这种形状可以旋转 90、180 或 270 度。

形状应如下所示:

描述2

如果您需要任何其他信息,请在评论中询问我。我数学不是很好所以请温柔,谢谢!

4

1 回答 1

1

如果AB是形成一条线的点,那么您可以使用坐标来描述该线上的任何点:

x = t · A x + (1−<i>t)· B x
y = t · A y + (1−<i>t)· B y
0 ≤ t ≤ 1

您还可以将中心为M和半径为r的圆描述为

( x - M x ) 2 + ( y - M y ) 2 = r 2

因此,从直线方程中取出xy,并将它们代入圆方程。您在t中获得一个二次方程。它的两个解描述了直线和圆之间的两个交点。在您的示例中,其中只有一个位于线段上,即满足 0 ≤ t ≤ 1。另一个描述了线段延伸超过其端点的点。将t的正确值带回直线方程,即可获得交点的xy坐标。

如果您事先不知道要与给定线相交哪个圆,则将所有三个相交,然后选择最合适的点。这可能是最接近线段外部起点的点。在两个交点都位于线段上的情况下也是如此。

于 2012-10-12T14:08:14.567 回答