如何理解xyz的判断点在凸包内模板


本文摘自PHP中文网,作者坏嘻嘻,侵删。

本篇文章给大家带来的内容是关于如何理解xyz的判断点在凸包内模板,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

int n,m,tot;

struct point

{

    double x,y;

}p[100000],a[100000],ss;

bool cmp(point A,point B)

{

    if(A.x!=B.x)

    return A.x<B.x;

    return A.y<B.y;

}

point operator -(point A,point B)

{

    point c;

    c.x=A.x-B.x;

    c.y=A.y-B.y;

    return c;

}

double cross(point A,point B)

{

    return A.x*B.y-B.x*A.y;

}

void dopack()

{

    tot=0;

    for(int i=1;i<=n;i++)

    {

        while(tot>1&&cross(p[tot-1]-p[tot-2],a[i]-p[tot-2])<=0)tot--;

        p[tot++]=a[i];

    }

    int k=tot;

    for(int i=n-1;i>0;i--)

    {

        while(tot>k&&cross(p[tot-1]-p[tot-2],a[i]-p[tot-2])<=0)tot--;

        p[tot++]=a[i];

    }

    if(n>1)tot--;

}

bool check(point A)

{

    int l=1,r=tot-2,mid;

    while(l<=r)

    {

        mid=(l+r)>>1;

        double a1=cross(p[mid]-p[0],A-p[0]);

        double a2=cross(p[mid+1]-p[0],A-p[0]);

        if(a1>=0&&a2<=0)

        {

            if(cross(p[mid+1]-p[mid],A-p[mid])>=0)return true;

            return false;

        }

        else if(a1<0)

        {

            r=mid-1;

        }

        else

        {

            l=mid+1;

        }

    }

    return false;

}

以上就是如何理解xyz的判断点在凸包内模板的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

mysql列column常用命令的使用总结

mysql数据库密码在哪修改

数据库高并发请求,如何保证数据完整性?详解mysql/innodb的加锁

c# 向mysql添加数据的两种方法

mysql中查询json格式的字段实例详解

mysql找回用户数据的案例

mysql cluster收费么

linux如何线上安装mysql

实例详解mysql存储过程

详解mysql 30条军规

更多相关阅读请进入《判断点》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...