Ваше определение центра вообще не имеет смысла.
Чтобы увидеть это, просто нарисуйте три невыровненные точки на плоскости и вычислите одну - единственную окружность, которая проходит для всех трех точек. Ясно, что ваш центр треугольника должен быть центром этого круга.
Теперь нарисуйте четвертую точку, которая не лежит на окружности и образует четырехгранный многоугольник. Что такое центр? На плоскости нет точки, равноудаленной от всех вершин.
Также обратите внимание, что даже в случае треугольников с использованием точки, равноудаленной от вершин, вы можете получить точки вне и далеко от многоугольника, а также численно нестабильно (при любых ε> 0 и M> 0 вы всегда можете построить треугольник, в котором специфическое перемещение вершины на расстояние меньше ε перемещает центр на расстояние больше M).
Обычно используемые "центры", которые легко вычислить, - это среднее значение всех вершин, среднее значение границы, центр масс или даже просто центр ограничивающего прямоугольника, выровненного по оси. Однако все они могут выходить за пределы многоугольника, если многоугольник не выпуклый, но в вашем случае они могут работать.
Самый простой разумный (поскольку он не зависит от системы координат) - это барицентр вершин (код на Python):
xc = sum(x for (x, y) in points) / len(points)
yc = sum(y for (x, y) in points) / len(points)
что-то плохое в том, что просто разделение одной стороны многоугольника дает вам другой центр (другими словами, это зависит от вершин, а не от набора точек, ограниченных многоугольником). Самым простым, что зависит от многоугольника, является центр масс границы IMO:
sx = sy = sL = 0
for i in range(len(points)): # counts from 0 to len(points)-1
x0, y0 = points[i - 1] # in Python points[-1] is last element of points
x1, y1 = points[i]
L = ((x1 - x0)**2 + (y1 - y0)**2) ** 0.5
sx += (x0 + x1)/2 * L
sy += (y0 + y1)/2 * L
sL += L
xc = sx / sL
yc = sy / sL
Для них обоих расширение до 3d тривиально ... просто добавьте z
, используя те же формулы.
В случае общего (не обязательно выпуклого, не обязательно односвязного) многоугольника «центром», который я нашел полезным, но который нетривиально вычислить, является () внутренняя точка, которая находится на максимальном расстоянии от границы (в другими словами «самая внутренняя» точка).
В этом случае я прибег к использованию дискретного (растрового) представления и преобразования гауссова расстояния.
person
6502
schedule
19.08.2013
mean(x) mean (y)
? Я не уверен, существует ли точка, равноудаленная от всех вершин, для всех многоугольников (например, точки четырехугольника в точках (0,0), (0,1), (0, -1), (3,0)). - person Hugh   schedule 19.08.2013