利用向量叉乘计算不规则几何图形的面积和形心
面积公式:
形心公式:
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
void Main()
{
var points = new List<Point>{
new Point{ X=-112.3138,Y= 93.6871 },
new Point{ X=-138.5816,Y= 51.6801 },
new Point{ X= -73.5186,Y= 18.9627 },
new Point{ X=-115.1425,Y= 57.7386 },
new Point{ X=-112.3138,Y= 93.6871 },
};
var area = GetArea(points);
Console.WriteLine(area);
var xin = GetXin(points);
Console.WriteLine($"x:{xin.X},y:{xin.Y}");
}
Point GetXin(List<Point> points)
{
double x = 0;
double y = 0;
var area = GetArea(points);
for (int i = 0; i < points.Count - 1; i++)
{
x += (points[i].X + points[i + 1].X) * (points[i].X * points[i + 1].Y - points[i + 1].X * points[i].Y);
y += (points[i].Y + points[i + 1].Y) * (points[i].X * points[i + 1].Y - points[i + 1].X * points[i].Y);
}
x = x / (6 * area);
y = y / (6 * area);
return new Point() { X = x, Y = y };
}
double GetArea(List<Point> points)
{
double area = 0;
for (int i = 0; i < points.Count - 1; i++)
{
area += points[i].X * points[i + 1].Y - points[i + 1].X * points[i].Y;
}
area = area / 2;
return area;
}
struct Point
{
public double X { get; set; }
public double Y { get; set; }
}
参考资料
本文会经常更新,请阅读原文: https://dashenxian.github.io/post/%E8%AE%A1%E7%AE%97%E4%B8%8D%E8%A7%84%E5%88%99%E5%87%A0%E4%BD%95%E5%9B%BE%E5%BD%A2%E7%9A%84%E9%9D%A2%E7%A7%AF ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 小神仙 (包含链接: https://dashenxian.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (125880321@qq.com) 。