在开发图形测量时遇到了面积计算的问题
三角形面积计算-海伦公式
可以使用以下公式:海伦公式。海伦公式是通过三角形的三条边长计算三角形面积的公式,公式如下:
面积 = sqrt(s * (s - a) * (s - b) * (s - c))
其中,s 是半周长,a、b、c 分别是三角形的三条边长。在C#中,您可以编写一个方法来计算三角形的面积,如下所示:
public double CalculateArea(Point a, Point b, Point c)
{
double ab = Math.Sqrt(Math.Pow(b.X - a.X, 2) + Math.Pow(b.Y - a.Y, 2));
double bc = Math.Sqrt(Math.Pow(c.X - b.X, 2) + Math.Pow(c.Y - b.Y, 2));
double ca = Math.Sqrt(Math.Pow(a.X - c.X, 2) + Math.Pow(a.Y - c.Y, 2));
double s = (ab + bc + ca) / 2;
return Math.Sqrt(s * (s - ab) * (s - bc) * (s - ca));
}
计算量比较大,可以使用向量乘法来计算
三角形面积计算-向量乘法
public double CalculateArea(Point a, Point b, Point c)
{
double area = Math.Abs((a.X - c.X) * (b.Y - a.Y) - (a.X - b.X) * (c.Y - a.Y)) / 2;
return area;
}
推导任意点围成的图形面积计算
任意点合围图形面积=若干个与中间点相连三角形的面积之和
中心点计算方法
public static Point GetCenterPoint(List<Point> points)
{
double centerX = points.Sum(p => p.X) / points.Count;
double centerY = points.Sum(p => p.Y) / points.Count;
return new Point(centerX, centerY);
}
任意图形计算方法为
public double CalculateArea(List<Point> points)
{
int numPoints = points.Count;
if (numPoints < 3)
{
return 0;
}
var p = GetCenterPoint(points);
double area = 0;
for (int i = 0; i < numPoints; i++)
{
Point currentPoint = points[i];
Point nextPoint = points[(i + 1) % numPoints]; // 使用取余确保最后一个点连接到第一个点
area += CalculateArea(currentPoint, nextPoint, p);
}
return area;
}
优化计算后
public double CalculateArea2(List<Point> points)
{
int numPoints = points.Count;
if (numPoints < 3)
{
throw new ArgumentException("多边形需要至少包含3个点");
}
double area = 0;
for (int i = 0; i < numPoints; i++)
{
Point currentPoint = points[i];
Point nextPoint = points[(i + 1) % numPoints]; // 使用取余确保最后一个点连接到第一个点
area += (currentPoint.X * nextPoint.Y) - (nextPoint.X * currentPoint.Y);
}
area = Math.Abs(area) / 2.0;
return area;
}