`
阿尔萨斯
  • 浏览: 4201637 次
社区版块
存档分类
最新评论

UVA 143 Orchard Trees(判断点在三角形内)

 
阅读更多

UVA 143 Orchard Trees(判断点在三角形内)

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=79

题意:

在一个[0,100]坐标范围的二维平面中,任意给你三角形的三点,问你[1,99]范围的整点坐标有多少个 在该三角形内部(在边上也算).

分析:

首先我们直接枚举所有的1-99整点,然后判断该点是否在三角形内部即可.

判断一个点是否在三角形内部可以用面积也可以用向量叉积方向的方法. 代码中我的面积判断.

题中给的3点如果共线的话, 那么只有一个整点也跟这3点共线且要在这3点构成的线段内才行.这点需要注意. 所以需要多判断一下该点的坐标是否在3点的坐标范围的最大最小值范围内.

我把double声明成了int, 结果WA了半天,真是醉了.

AC代码:

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const double eps=1e-10;
int dcmp(double x)
{
    if(fabs(x)<eps) return 0;
    return x<0?-1:1;
}
struct Point
{
    double x,y;
    Point(){}
    Point(double x,double y):x(x),y(y){}
}A,B,C;

typedef Point Vector;

Vector operator-(Point A,Point B)
{
    return Vector(A.x-B.x,A.y-B.y);
}
double Cross(Vector A,Vector B)
{
    return A.x*B.y-A.y*B.x;
}
double Area(Point A,Point B,Point C)
{
    return fabs(Cross(A-B,A-C))/2;
}
bool InTriangle(Point P,Point A,Point B,Point C)
{
    double max_x=max(A.x,max(B.x,C.x));//我真是醉了,这里声明成了int WA了我半天
    double min_x=min(A.x,min(B.x,C.x));
    double max_y=max(A.y,max(B.y,C.y));
    double min_y=min(A.y,min(B.y,C.y));
    double s=Area(A,B,C);
    if( dcmp( Area(P,A,B)+Area(P,A,C)+Area(P,B,C)-Area(A,B,C) ) ==0 )
    {
        if(dcmp(s)>0) return true;//ABC三点不共线

        return dcmp(P.x-min_x)>=0 && dcmp(P.x-max_x)<=0 && dcmp(P.y-min_y)>=0 && dcmp(P.y-max_y)<=0;//三点共线且P在线段ABC内
    }
    return false;
}

int main()
{
    while(scanf("%lf%lf%lf%lf%lf%lf",&A.x,&A.y,&B.x,&B.y,&C.x,&C.y)==6)
    {
        if(A.x==0 && A.y==0 && B.x==0 && B.y==0 && C.x==0 && C.y==0) break;
        int ans=0;//三角形内点数
        for(int i=1;i<=99;++i)
        for(int j=1;j<=99;++j)
        {
            Point P(i,j);
            if(InTriangle(P,A,B,C)) ++ans;
        }
        printf("%4d\n",ans);
    }
    return 0;
}

分享到:
评论

相关推荐

    orchard 17 trees 6

    orchard plant problem data for 17 trees (4 trees pre row) total 14 rows

    orchard plant 2

    data file for orchard plant problem for 17 trees with 4 trees per row total 14 rows

    orchard 17 trees 1

    result for orchard plant problem with 17trees 4 trees per row

    Orchard Source1.4.0

    Orchard是一个以微软为主导的开源CMS项目,它允许使用者在Asp.Net平台上快速建立网站,并且提供扩展框架能够允许定制人员通过模块和主题 等增加额外的内容,Orchard能够建设出复杂的内容管理系统,它提供了强大的...

    CMS资源Orchard.Web.1.6

    Orchard是一个以微软为主导的开源CMS项目,它允许使用者在.Net平台上快速建立网站,并且提供扩展框架能够允许定制人员通过模块和主题等增加额外的内容,Orchard能够建设出复杂的内容管理系统,它提供了强大的模块化...

    Orchard v1.2 源码

    Orchard v1.2 源码 Orchard是一个免费,开源,以社区为重点的项目,目标解决ASP.NET平台应用程序和组件重用。它可以创建共享组件来建立ASP.NET应用程序和扩展,并利用这些组件,以满足最终用户,脚本编写者和开发...

    Orchard v1.6 安装包

    Orchard是一个以微软为主导的开源CMS项目,它允许使用者在.Net平台上快速建立网站,并且提供扩展框架能够允许定制人员通过模块和主题等增加额外的内容,Orchard能够建设出复杂的内容管理系统,它提供了强大的模块化...

    Orchard 项目源码

    Orchard是目前在发展的初级阶段。 我们选择在这个阶段的项目,以便由发展商邀请社区参与在形成早期项目的方向,使我们可以公开验证我们的设计和开发方法。 早期的技术预览版可以从我们的下载页(Orchard最新版本...

    orchard中文语言包

    orchard中文语言包,配合 多语言管理模块使用 在vs2010命令提示中 运行 orchard.exe 后 执行 install translate 路径\orchard.zh-CN.po.zip

    Orchard.ImageGallery

    网上版本不兼容orchard 1.9+,表现为没有Image Gallery管理菜单 这个是本人编译的兼容orchard 1.9+的版本 安装方法后台模块(module),选择从文件安装

    Orchard1.2.41源代码

    Orchard1.2.41源代码 采用C#+mvc开发,cms系统

    Orchard(开源.NET CMS) v1.6 安装包.zip

    Orchard是一个以微软为主导的开源CMS项目,它允许使用者在.Net平台上快速建立网站,并且提供扩展框架能够允许定制人员通过模块和主题等增加额外的内容,Orchard能够建设出复杂的内容管理系统,它提供了强大的模块化...

    Orchard.Web.1.8.1

    Orchard.Web.1.8.1,开发框架。

    Orchard CMS

    Orchard CMS 强大的CMS.... 微软的开源项目.

    orchard 1.8 技术架构.官方文档(中英双语)

    orchard 1.8 官方文档双语翻译

    Orchard 1.8

    orchard 1.8 和1.73并行发布。基于c# mvc4的cms,给爬不上官网的朋友下载。

    如何安装Orchard

    如何安装Orchard(基于Web安装平台的安装)

    Orchard CMS Development

    About Orchard CMS Development

    Orchard.Source.1.8.1

    cms,微软推荐,开源源码Orchard.Source.1.8.1

    orchard入门

    orchard官方文档,深入浅出描述了一些基本概念。 对于开发和使用都是有益处的。 仅供新人查阅。

Global site tag (gtag.js) - Google Analytics