我有一个算法如下找到一条线的中心(中点)。
public DoublePoint getMidPoint() {
return new DoublePoint((origin.x + endPoint.x) / 2, (origin.y + endPoint.y) / 2);
}
它似乎适用于任何价值观。但我似乎记得一个更复杂的算法,涉及两个圆,其半径等于线的长度,其中心点是线的末端。从这些圆的交点绘制的线将与您正在测试的线段相交,从而得到线的中点。我确信算法可以100%的时间运行。不确定我的简单算法似乎太简单。
答案 0 :(得分:14)
您记得的是使用指南针和直尺构建线段的垂直平分线的几何方法。例如,考虑一下:
这对古希腊人来说很好,但还有其他方法(例如你编码的方法)对计算机更有效。
答案 1 :(得分:3)
你依稀记住的算法是使用直尺和指南针来获得中点。绘制取两个相等的半径圆,以线段的两端为中心,使它们相交 - 线段的长度可以。使用直尺连接圆相交的点。此线与原始线段相交的位置是中点。 http://www.mathopenref.com/constbisectline.html
的精彩动画答案 2 :(得分:2)
您拥有的算法和代码是最简单,最好的方法。
答案 3 :(得分:2)
您的简单算法完全正确。圆圈的方法是找到一对圆规的中点。
答案 4 :(得分:1)
您的算法是将线条转换为原点的简化,找到由该线条表示的矢量,将其减半,然后将其平移回原始线条。简化是有效的,算法是正确的。