取消

计算不规则几何图形的面积

利用向量叉乘计算不规则几何图形的面积和形心


面积公式:

面积公式

形心公式:

形心公式

形心公式

代码

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)

登录 GitHub 账号进行评论