原理:
任意多邊形的面積可由任意一點與多邊形上依次兩點連線構成的三角形向量面積求和得出。
分析:
由於給出的點是相對於我們的座標原點的座標,每個點實際上我們可以當作乙個頂點相對於原點的向量,如下圖所示:
p(0,0)對應的頂點向量分別為:a(x0,y0),b(x1,y1),…,g(x6,y6)
另外,△pab△pab的向量面積即為
且多邊形面積為:
根據上述公式可以直接求出多邊形的**從而避免了邊長的複雜計算。
例題:題解:計算幾何裸題
#include #includeview code#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#define debug
#define ri register int
using
namespace
std;
typedef
long
long
ll;//
typedef __int128 lll;
const
int n=100000+10
;const
int mod=1e9+7
;const
double pi = acos(-1.0
);const
double exp = 1e-8
;const
int inf = 0x3f3f3f3f
;int
t,n,m,k,q;
double
ans;
struct
nodee[n];
double
a[n];
char
str;
intmain()
for(int i=1;i<=n;i++)
for(int i=1;i<=n;i++)
double sum=fabs(a[n]/2
);
//cout
s,t;
while(q--)
printf(
"%.6f
",ans);
//cout << "hello world!" << endl;
return0;
}
c++版本二
題解:計算幾何
只要叉積維護一下字首和就好了。
#include #includeview code#include
#include
#include
using
namespace
std;
#define mst(a,b) memset((a),(b),sizeof(a))
#define rush() int t;scanf("%d",&t);while(t--)typedef
long
long
ll;const
int maxn = 200005
;const ll inf =1e18;
const ll mod=1e9+7
;const
double eps = 1e-9;
intn,m;
struct
node
a[maxn];
double
sum[maxn];
double
cross(node a,node b,node c)
intmain()
node zero;
zero.x=0
; zero.y=0
;
for(int i=1;i<=n;i++)
for(int i=n+1;i<=2*n;i++)
double sum=fabs(sum[n])/2.0
;
double cnt=0
;
for(int i=0;i)
printf(
"%.15f\n
",cnt);
}
多邊形面積
點積 a b x1 x2 y1 y2 a b cos 點積的結果是乙個數值 叉積 a b x1 y2 x2 y1 a b sin 叉積的結果也是乙個向量,是垂直於向量a,b所形成的平面,如果看成三維座標的話是在 z 軸上,上面結果是它的模。三角形的面積 向量a和 向量b的叉積的絕對值表示 以 向量a...
多邊形求面積,
這個程式很值得一博。昨天一位學地質的高中同學問我寫個程式求多邊形面積,因為他說看到excel就煩。正好前段時間在csdn上看到乙個帖子求多邊形面積,也想到了乙個演算法,於是寫了這個程式。演算法描述 乙個多邊形的面積可以由這樣兩個系列的梯形來計算,以凸多邊形舉例,在圖形上方的一系列邊和其在x軸的投影組...
10 4 多邊形面積
10.4 多邊形面積 源程式名 area.pas,c,cpp 可執行檔名 area.exe 輸入檔名 area.in 輸出檔名 area.out 問題描述 給出乙個簡單多邊形 沒有缺口 它的邊要麼是垂直的,要麼是水平的。要求計算多邊形的面積。多邊形被放置在乙個x y的卡笛爾平面上,它所有的邊都平行於...