0
我曾在iOS上工作過,並有一個帶地理座標的多邊形,如(-27.589846,151.982112)( - 27.590174,151.983045)( - 27.590773,151.982680)( - 27.590602,151.981908)。計算多邊形的最小圓環
我想找出它的外圓incircle:center and radius?
有沒有辦法做到這一點?
謝謝?
我曾在iOS上工作過,並有一個帶地理座標的多邊形,如(-27.589846,151.982112)( - 27.590174,151.983045)( - 27.590773,151.982680)( - 27.590602,151.981908)。計算多邊形的最小圓環
我想找出它的外圓incircle:center and radius?
有沒有辦法做到這一點?
謝謝?
,你可以用它來確定非自相交多邊形的中心:
#include <iostream>
struct Point2D
{
double x;
double y;
};
Point2D compute2DPolygonCentroid(const Point2D* vertices, int vertexCount)
{
Point2D centroid = {0, 0};
double signedArea = 0.0;
double x0 = 0.0; // Current vertex X
double y0 = 0.0; // Current vertex Y
double x1 = 0.0; // Next vertex X
double y1 = 0.0; // Next vertex Y
double a = 0.0; // Partial signed area
// For all vertices except last
int i=0;
for (i=0; i<vertexCount-1; ++i)
{
x0 = vertices[i].x;
y0 = vertices[i].y;
x1 = vertices[i+1].x;
y1 = vertices[i+1].y;
a = x0*y1 - x1*y0;
signedArea += a;
centroid.x += (x0 + x1)*a;
centroid.y += (y0 + y1)*a;
}
// Do last vertex
x0 = vertices[i].x;
y0 = vertices[i].y;
x1 = vertices[0].x;
y1 = vertices[0].y;
a = x0*y1 - x1*y0;
signedArea += a;
centroid.x += (x0 + x1)*a;
centroid.y += (y0 + y1)*a;
signedArea *= 0.5;
centroid.x /= (6.0*signedArea);
centroid.y /= (6.0*signedArea);
return centroid;
}
int main()
{
Point2D polygon[] = {{0.0,0.0}, {0.0,10.0}, {10.0,10.0}, {10.0,0.0}};
size_t vertexCount = sizeof(polygon)/sizeof(polygon[0]);
Point2D centroid = compute2DPolygonCentroid(polygon, vertexCount);
std::cout << "Centroid is (" << centroid.x << ", " << centroid.y << ")\n";
}
要獲得半徑,然後確定中心之間的距離,每個頂點,並挑選規模最大的一次!
你是一個天才:)。我已經驗證了你的編碼,這是正確的,很棒 – Jacky
你在說2D或地理座標(WGS-84)嗎?所有座標都在座標上嗎?怎麼樣的外圍?這些被定義在一個三角形上。請澄清你的問題。 –
這是下面的正確解決方案。我已經驗證:) – Jacky