matlab 二维凸包面积,PKU——3348——(凸包和计算多边形面积)
//3348 Accepted 264K 0MS C++ 4016B//典型的凸包和计算多边形面积#include#include#include#include#include#includeusingnamespacestd ;#defineunllong unsigned long long#defineunint unsigned int#defineprintline printf( "\n" )typedeflonglongllong ;//const double PI = 2.0 * acos( 0.0 ) ;#definezero(x) (((x)>0?(x):-(x))
{doublex ;doubley ;doublek ;
};structPOINT point[size] ;intstack[size] ;inttop=2;intinn ;doubleoutarea ;doublefdist(doublex1,doubley1,doublex2,doubley2 )
{returnsqrt( (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2) ) ;
}voidinput()
{intleftdown=0;for(inti=0; i
scanf("%lf %lf",&point[i].x,&point[i].y ) ;//if( miny>point[i].y || miny==point[i].y&&minx>point[i].x )if( point[leftdown].y>point[i].y||zero(point[leftdown].y-point[i].y)&&point[leftdown].x>point[i].x )
leftdown=i ;//找到最左下的点}doubletemp ;
temp=point[0].x ; point[0].x=point[leftdown].x ; point[leftdown].x=temp ;
temp=point[0].y ; point[0].y=point[leftdown].y ; point[leftdown].y=temp ;for(inti=1; i
point[i].k=atan2( point[i].y-point[0].y, point[i].x-point[0].x ) ;
}//以点(minx, miny)计算极角}doublexmult( POINT&p1, POINT&p2, POINT&p0 )
{//计算叉乘--线段旋转方向和对应的四边形的面积--返回(p1-p0)*(p2-p0)叉积//if叉积为正--p0p1在p0p2的顺时针方向; if(x==0)共线return(p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y) ;
}intgramcmp1(constvoid*a,constvoid*b )
{structPOINT*c=(structPOINT*)a ;structPOINT*d=(structPOINT*)b ;if( c->k-d->k>eps )return1;elseif( c->k-d->kx-d->x>0?1: -1;
}intgramcmp(constvoid*a,constvoid*b )
{structPOINT*c=(structPOINT*)a ;structPOINT*d=(structPOINT*)b ;doublexmult_val=xmult(*c,*d, point[0] ) ;if( xmult_val>eps )return-1;elseif( xmult_valx-d->x>0?1: -1;//else//return fdist( c->x,c->y,point[0].x,point[0].y )>fdist(d->x,d->y,point[0].x,point[0].y)? -1:1 ;}voidgramham()
{//凸包的点存在于stack[]中qsort( point+1, inn-1,sizeof(point[1]), gramcmp ) ;//极坐标排序--注意只有(n-1)个点//int stack[size] ; int top = 2 ;stack[0]=0; stack[1]=1; stack[2]=2; top=2;for(inti=3; i
{while( top>=1&&xmult( point[i], point[stack[top]], point[stack[top-1]] )>=-1*eps )
top--;//顺时针方向--删除栈顶元素stack[++top]=i ;//新元素入栈}/*for( int i=0; i<=top; i++ )
{
//printf( "%lf===%lf\n",point[stack[i]].x, point[stack[i]].y ) ;
cout <
}*/}doubleflen_poly()
{//计算凸包的周长doublelen=0.0;doublex1, x2, y1, y2 ;for(inti=0; i
x1=point[stack[i+1]].x ; x2=point[stack[i]].x ;
y1=point[stack[i+1]].y ; y2=point[stack[i]].y ;
len+=fdist( x1, y1, x2, y2 ) ;
}
x1=point[stack[0]].x ; x2=point[stack[top]].x ;
y1=point[stack[0]].y ; y2=point[stack[top]].y ;
len+=fdist( x1, y1, x2, y2 ) ;returnlen ;
}doublefarea_poly(intn, POINT poly[] )
{doublearea=0.0;doubles1=0.0, s2=0.0;for(inti=0; i
{
s1+=poly[stack[(i+1)%n]].y*poly[stack[i%n]].x ;
s2+=poly[stack[(i+1)%n]].y*poly[stack[(i+2)%n]].x ;
}returnfabs( s1-s2 )/2;
}voidprocess()
{
gramham() ;//保存好凸包的点在stack[]中outarea=farea_poly( top+1, point ) ;
}voidoutput()
{
printf("%d\n", (int)outarea/50) ;
}intmain()
{//freopen( "fc.in", "r", stdin ) ;//freopen( "fc.out","w",stdout ) ;//freopen( "in.txt", "r", stdin ) ;while( scanf("%d",&inn )!=EOF )
{
input() ;
process() ;
output() ;
}return0;
}
matlab 二维凸包面积,PKU——3348——(凸包和计算多边形面积)相关推荐
- MATLAB二维图形绘制
MATLAB二维图形绘制 数据点标记 数据点 颜色 线型 曲线图 一.plot函数 (一)最简单的plot函数调用格式: plot(x) (1)plot函数的参数 X 为普通向量, (2)plot函数 ...
- matlab 二维样条插值函数,matlab中二维插值函数interp2的使用详解
下面是一段产生log-normal分布的代码,以此进行说明. clear all; clc; for t=1:100 Traffic(t) =curve(t); end MaxTraffic = ma ...
- python计算多边形面积_Python求凸包及多边形面积教程
一般有两种算法来计算平面上给定n个点的凸包:Graham扫描法(Graham's scan),时间复杂度为O(nlgn):Jarvis步进法(Jarvis march),时间复杂度为O(nh),其中h ...
- MATLAB二维绘图(二)向图中添加标题,坐标轴,图标和文字信息
MATLAB二维绘图(二)向图中添加标题,坐标轴,图标和文字信息 1.添加标题.图例.x轴信息和y轴信息,示例: %% 添加标题 clear; clc; close all; x = 0:0.1:2* ...
- Matlab 二维网格图pcolor和imagesc区别
Matlab 二维网格图pcolor和imagesc区别 在速度或者衰减层析成像反演之后会得到地下介质每个网格点的速度/衰减值,在进行呈现的时候可以使用maltab的pcolor和imagesc进行二 ...
- matlab 二维矩阵变成一维矩阵
matlab 二维矩阵变成一维矩阵 1.一维变二维: https://blog.csdn.net/qq_40584593/article/details/90691276 reshape 2.a(:) ...
- Matlab二维图形绘制与图形处理
Matlab二维图形绘制与图形处理 一.二维图形绘制 1.极坐标图 2.散点图 3. 平面等值线图 二.图形处理 1.添加格栅,图例 和标注 2.定制坐标 3.在之前基础上继续作图 4.新建图形置于当 ...
- matlab二维绘图部分
matlab二维绘图部分 X,Y是向量,分别表示点集的横坐标和纵坐标 PLOT(X,Y,S) 符号函数(显函数.隐函数和参数方程)画图 (1) ezplot ezplot('f(x)',[a,b]) ...
- matlab二维三维图形绘制和坐标轴范围设置
matlab二维绘图 一. 二维图形(Two dimensional plotting) 1. 基本绘图函数(Basic plotting function):Plot, semilogx, se ...
最新文章
- 框架:spring、springmvc、springboot
- SQL server注入
- python贪吃蛇设计目标_基于 pygame 设计贪吃蛇游戏
- Intellij新建Spring项目引入用户目录下的Spring jar包
- 封装cookie设置和获取的简易方法
- MapXtreme 使用技巧10例
- flask结合令牌桶算法实现上传和下载速度限制
- 十进制 二进制 十六进制 八进制
- “店小二”精神国际化步伐23年成就巨无霸
- 《算法笔记》第四章笔记
- Hive DML 语句操作报错
- 【应用随机过程】04. 马尔可夫链的平稳分布
- linux-网站服务
- 车联网各领域头部企业排行榜
- 【枚举】项目一。求对称点
- u盘不能拷贝超过4g的大文件吗?
- 信息量、信息熵、信息增益的理解
- 如何把Windows 7英文系统转换为中文系统
- 可行性报告(内容格式)
- 大型虚拟现实仿真系统解决方案