由点求面积

矩形类与运算符重载
#include <iostream>
using namespace std;
class Rectangle
{
public:
	Rectangle(){x1=0;y1=0;x2=0;y2=0;}
	Rectangle(double X1,double Y1,double X2,double Y2):x1(X1),y1(Y1),x2(X2),y2(Y2){}
	Rectangle operator +(Rectangle &p)
	{
		 Rectangle P;
		 P.x1=x1+p.x1;
		 P.y1=y1+p.y1;
		 P.x2=x2+p.x2;
		 P.y2=y2+p.y2;
		 return P;

	}
	friend ostream& operator <<(ostream & output,Rectangle & p)
	{
		output<<(p.x2-p.x1)*(p.y2-p.y1)<<endl;
		return output;
	}

	void input()
	{
		cin>>x1>>y1>>x2>>y2;
	}
	void output()
	{
		cout<<(x2-x1)*(y2-y1)<<endl;
	}
private:
	double x1,y1,x2,y2;
};
int main()

{

    Rectangle p1(1,1,6,3),p2,p3;

    p2.input();

    p3=p1+p2;

    cout<<p3;

    return 0;

}


在 Excel 中根据经纬度计算面积,可借助公式结合一些地理知识实现,基本思路是先将经纬度转换为平面坐标,再用平面几何方法计算面积。但 Excel 自身无直接计算经纬度面积的函数,可参考以下步骤: 1. **数据准备**:将经纬度数据整理到 Excel 表格,一列经度,一列纬度。 2. **经纬度转换为平面坐标**:可使用简单的近似转换公式,将经纬度转换为平面直角坐标。假设地球为完美球体,半径为 6371000 米,以下为转换公式: - \(x = R \times cos(lat) \times cos(lon)\) - \(y = R \times cos(lat) \times sin(lon)\) - \(z = R \times sin(lat)\) 其中 \(R\) 是地球半径,\(lat\) 是纬度(弧度),\(lon\) 是经度(弧度)。在 Excel 中,可使用如下公式将经纬度转换为弧度: ```plaintext =RADIANS(纬度单元格) =RADIANS(经度单元格) ``` 然后用上述公式计算 \(x\)、\(y\)、\(z\) 坐标。 3. **使用 Shoelace 公式计算面积**:Shoelace 公式用于计算平面上多边形的面积。对于一系列的 \((x_1,y_1),(x_2,y_2),...,(x_n,y_n)\),面积 \(A\) 计算公式为: \(A = \frac{1}{2} \left| \sum_{i=1}^{n-1} x_i y_{i+1} - x_{i+1} y_i \right| + \frac{1}{2} \left| x_n y_1 - x_1 y_n \right|\) 在 Excel 中,可通过公式逐步计算该值。 如果觉得手动编写公式复杂,也可借助 VBA 代码实现。可将引用[5]中的 JavaScript 代码转换为 VBA 代码: ```vba Function getArea(ring As Variant) As Double Dim sJ As Double Dim Hq As Double Dim arr() As Variant Dim i As Long Dim c As Double Dim d As Double Dim e As Long Dim g As Long Dim h As Variant Dim k As Variant Dim u As Double Dim v As Double sJ = 6378137 Hq = 0.017453292519943295 ReDim arr(LBound(ring) To UBound(ring)) For i = LBound(ring) To UBound(ring) arr(i) = Array(ring(i, 1), ring(i, 2)) Next i c = sJ * Hq d = 0 e = UBound(arr) - LBound(arr) + 1 If e < 3 Then getArea = 0 Exit Function End If For g = LBound(arr) To UBound(arr) - 1 h = arr(g) k = arr(g + 1) u = h(0) * c * Cos(h(1) * Hq) v = k(0) * c * Cos(k(1) * Hq) d = d + (u * k(1) * c - v * h(1) * c) Next g h = arr(UBound(arr)) k = arr(LBound(arr)) u = h(0) * c * Cos(h(1) * Hq) v = k(0) * c * Cos(k(1) * Hq) d = d + (u * k(1) * c - v * h(1) * c) getArea = 0.5 * Abs(d) End Function ``` 使用时,在 Excel 中选中一个单元格,输入 `=getArea(范围)`,范围是包含经纬度数据的单元格区域。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值