圈奶牛<计算几何><C++>

原创 2015年11月18日 20:48:16
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
struct point{//x横坐标,y纵坐标.
        double x;
        double y;
}p[10000],chosen[10000];
bool cmp(point a,point b){
    if(a.y==b.y)
        return a.x<b.x;
    else
        return a.y<b.y;
}
double count(double x,double y){//计算连线长度,x为Δx,y为Δy.
    return sqrt(pow(x,2)+pow(y,2));
}
double det(point o,point a,point b){//计算叉积,判断OA是否在OB逆时针方向.
    return (a.y-o.y)*(b.x-o.x)-(a.x-o.x)*(b.y-o.y);
}
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>p[i].x>>p[i].y;
    sort(p,p+n,cmp);
    int choose=0;
    for(int i=0;i<n;i++){
        while(choose>=2&&det(chosen[choose-1],p[i],chosen[choose-2])<0)
            choose--;
        chosen[choose++]=p[i];
    }
    int mark=choose+1;
    for(int i=n-2;i>=0;i--){
        while(choose>=mark&&det(chosen[choose-1],p[i],chosen[choose-2])<0)
            choose--;
        chosen[choose++]=p[i];
    }
    double tot=0;
    for(int i=0;i<choose-1;i++)
        tot+=count(chosen[i].x-chosen[i+1].x,chosen[i].y-chosen[i+1].y);
    printf("%.2f",tot);
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

计算几何-求线段交点算法和代码(C++语言)

问题描述:已知两条线段P1P2和Q1Q2,判断P1P2和Q1Q2是否相交,若相交,求出交点。 两条线段的位置关系可以分为三类:有重合部分、无重合部分但有交点、无交点。 算法核心 算法的步骤...

计算几何模板——平面最近点对(附C++源代码) - [转载经典]

转:http://anonympine.blogbus.com/logs/33968379.html 求平面最近点对的核心思想乃是二分,用递归实现。具体操作如下:      若点的个数很少(比如小...
  • zmlcool
  • zmlcool
  • 2011年08月28日 21:25
  • 2301

C++实现常用的平面计算几何问题求解

通过封装常用的点、线段类型,并提供点、线间的相互关系运算,为计算几何工具库的编写提供基础框架。...
  • alaclp
  • alaclp
  • 2015年01月17日 02:08
  • 1081

用C++语言写的计算几何例子

  • 2011年07月10日 14:05
  • 13KB
  • 下载

计算几何 C++模版

  • 2011年09月10日 09:36
  • 2KB
  • 下载

基于Kinect v2+PCL的模型奶牛重建(中)——地面去除与法向量计算

从上一节中我们得到了8个PCD文件,其中第一个文件是地面点云,第二个文件是地面+盒子的点云,后面的文件是6个不同角度的地面+盒子+奶牛的点云。 这一节我们将生成6个不同角度的去除了地面的点云,并计算其...

通用几何计算算法C++集合

  • 2011年07月04日 20:29
  • 13KB
  • 下载

POJ - 1985 Cow Marathon 奶牛马拉松 计算树的直径

【问题描述】 农夫约翰有N个农场,标号为1到N。M条不同的垂直或水平的道路连接着农场,道路的长度不超过1000。这些农场的分布就像下面的地图一样,图中农场用F1..F7表示:每个农场最多能在东西南北...

JZOJ1312.【USACO题库】5.1.1 Fencing the Cows圈奶牛

problem题目描述 农夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏。他建造的围栏必须包括他的奶牛喜欢吃草的所有地点。对于给出的这些地点的坐标,计算最短的能够围住这些点的围栏的长度。PR...

[cogs896]圈奶牛

农夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏。他建造的围栏必须包括他的奶牛喜欢吃草的所有地点。对于给出的这些地点的坐标,计算最短的能够围住这些点的围栏的长度。 PROGRAM NAME: ...
  • ScaPrt
  • ScaPrt
  • 2017年04月06日 20:40
  • 90
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:圈奶牛<计算几何><C++>
举报原因:
原因补充:

(最多只允许输入30个字)