nyis oj 68 三点顺序 (计算几何基础)

来源:互联网 发布:网站源码小偷v18.0 编辑:程序博客网 时间:2024/05/18 01:31

三点顺序

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断A,B,C是顺时针给出的还是逆时针给出的?

如:

图1:顺时针给出

图2:逆时针给出 

 

        <图1>                   <图2>

输入
每行是一组测试数据,有6个整数x1,y1,x2,y2,x3,y3分别表示A,B,C三个点的横纵坐标。(坐标值都在0到10000之间)
输入0 0 0 0 0 0表示输入结束
测试数据不超过10000组
输出
如果这三个点是顺时针给出的,请输出1,逆时针给出则输出0
样例输入
0 0 1 1 1 30 1 1 0 0 00 0 0 0 0 0
样例输出
01
来源
计算几何基础
上传者

张云聪

开始做这道题时,自己一直在草稿纸上画,判断有多少种情况,只是觉得情况比较多,可能考虑的不全面,开始我就是按照以某一个点为顶点,然后写出判别条件;后来我自己写出来运行一看,得到的结果全是1,说明我情况考虑有重复了,我的思路可能就有偏差,包含了其他的情况;

if((y1>=y2&&y1>=y3&&x3<=x2)//以a为顶点           ||(y2>=y1&&y2>=y3&&x3>=x1)//b为顶点           ||(y3>=y2&&y3>=y1&&x1<=x2))//c为顶点            printf("1\n");       else if((y1>=y2&&y1>=y3&&x2<=x3)          ||(y2>=y1&&y2>=y3&&x3<=x1)          ||(y3>=y2&&y3>=y1&&x2<=x1))          printf("0\n");

后来一看讨论区,竟然有公式。。。对计算几何还是无感啊。。以前学过的公式也不会利用,利用了我们以前学过的叉积;

利用矢量叉积判断是逆时针还是顺时针。设矢量P = ( x1, y1 ),Q = ( x2, y2 ),则矢量叉积定义为由(0,0)、p1、p2和p1+p2 所组成的平行四边形的带符号的面积,即:P × Q = x1*y2 - x2*y1,其结果是一个标量。显然有性质 P × Q = - ( Q × P ) 和 P × ( - Q ) = - ( P × Q )。
叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系:

  若 P × Q > 0 , 则P在Q的顺时针方向。
  若 P × Q < 0 , 则P在Q的逆时针方向。
  若 P × Q = 0 , 则P与Q共线,但可能同向也可能反向。

解释:
a×b=(ay * bz - by * az, az * bx - ax * bz, ax * by - ay * bx) 又因为az bz都为0,所以a×b=(0,0, ax * by - ay * bx)
根据右手系(叉乘满足右手系),若 P × Q > 0,ax * by - ay * bx>0,也就是大拇指指向朝上,所以P在Q的顺时针方向,一下同理。

看了别人博客写的有关叉积的内容  http://blog.csdn.net/sjl_leaf/article/details/8789785  顿时就茅舍顿开啊,十多行代码就解决了;

#include <cstdio>int main(){   int x1,y1,x2,y2,x3,y3;   int flag;   while(scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3))   {       if(!x1&&!y1&&!x2&&!y2&&!x3&&!y3)        break;      flag=(x2-x1)*(y3-y1)-(y2-y1)*(x3-x1);      if(flag<0) printf("1\n");      else printf("0\n");   }    return 0;}
把三点化成矢量式进行计算,AB=(x2-x1,y2-y1),AC=(x3-x1,y3-y1);

他们的叉积就是|x2-x1,y2-y1|

             |x3-x1,y3-y1|

利用行列式的计算,可以得出 flag=(x2-x1)*(y3-y1)-(y2-y1)*(x2-x1);

判断flag的值

1.flag<0 顺时针

2.flag>0 逆时针

3.flag=0 三点共线

2 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 滴滴快车出车祸怎么办 交警法院扣车怎么办 肇事逃逸没钱赔怎么办 撞死人无力赔偿怎么办 宝贝咳嗽很厉害怎么办 开车有人别车怎么办 判刑罚金交不起怎么办 罚金太多交不起怎么办 判决书上的罚金怎么办 刑事罚款不交怎么办 缎面的鞋脏了怎么办 夏天脸上长粉刺怎么办 鬃狮不吃东西怎么办 买二手车的车牌怎么办 榴莲打开了肉没熟怎么办 gmat的prep做完怎么办 电脑没ip地址怎么办 电脑ip地址缺失怎么办 cos还原不了人物怎么办 执行局抓人十五天不放人怎么办 笔记本电脑键盘按键错乱怎么办 靠墙倒立上不去怎么办 医院多收钱了怎么办 学生总是转笔怎么办 吃错东西呕吐怎么办 手腕筋扭伤了怎么办 右膝盖内侧疼痛怎么办 膝盖关节腔积液怎么办 小孩玩游戏花钱怎么办 初三玩手机上瘾怎么办 无线网有感叹号怎么办 台式电脑网络感叹号怎么办 忘记发红包密码怎么办 电信诈骗被骗后怎么办 C小孩讨厌上学怎么办 军训来大姨妈怎么办 夏天军训来月经怎么办 军训遇到大姨妈怎么办 长春市图书馆读者证怎么办 济宁图书馆怎么办读者卡 海南省图书馆读者证怎么办