函数模版之几何面积

本文提供了一系列实用的几何计算方法,包括计算不同形状的面积(如三角形、多边形)、球面上两点之间的圆心角和距离等。适用于解决计算机图形学、地理信息系统等领域中的常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 面积

#include <math.h>

struct point{double x,y;};

//计算cross product (P1-P0)x(P2-P0)

double xmult(point p1,point p2,point p0){

return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);

}

double xmult(double x1,double y1,double x2,double y2,double x0,double y0){

return (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0);

}

//计算三角形面积,输入三顶点

double area_triangle(point p1,point p2,point p3){

return fabs(xmult(p1,p2,p3))/2;

}

double area_triangle(double x1,double y1,double x2,double y2,double x3,double y3){

return fabs(xmult(x1,y1,x2,y2,x3,y3))/2;

}

//计算三角形面积,输入三边长

double area_triangle(double a,double b,double c){

double s=(a+b+c)/2;

return sqrt(s*(s-a)*(s-b)*(s-c));

}

//计算多边形面积,顶点按顺时针或逆时针给出

double area_polygon(int n,point* p){

double s1=0,s2=0;

int i;

for (i=0;i<n;i++)

s1+=p[(i+1)%n].y*p[i].x,s2+=p[(i+1)%n].y*p[(i+2)%n].x;

return fabs(s1-s2)/2;

}

1.2 球面

#include <math.h>

const double pi=acos(-1);

//计算圆心角lat表示纬度,-90<=w<=90,lng表示经度

//返回两点所在大圆劣弧对应圆心角,0<=angle<=pi

double angle(double lng1,double lat1,double lng2,double lat2){

double dlng=fabs(lng1-lng2)*pi/180;

while (dlng>=pi+pi)

dlng-=pi+pi;

if (dlng>pi)

dlng=pi+pi-dlng;

lat1*=pi/180,lat2*=pi/180;

return acos(cos(lat1)*cos(lat2)*cos(dlng)+sin(lat1)*sin(lat2));

}

//计算距离,r为球半径

double line_dist(double r,double lng1,double lat1,double lng2,double lat2){

double dlng=fabs(lng1-lng2)*pi/180;

while (dlng>=pi+pi)

dlng-=pi+pi;

if (dlng>pi)

dlng=pi+pi-dlng;

lat1*=pi/180,lat2*=pi/180;

return r*sqrt(2-2*(cos(lat1)*cos(lat2)*cos(dlng)+sin(lat1)*sin(lat2)));

}

//计算球面距离,r为球半径

inline double sphere_dist(double r,double lng1,double lat1,double lng2,double lat2){

return r*angle(lng1,lat1,lng2,lat2);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值