三点顺序

时间限制: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 3
0 1 1 0 0 0
0 0 0 0 0 0
例子输出
0
1
来源

source=%E8%AE%A1%E7%AE%97%E5%87%A0%E4%BD%95%E5%9F%BA%E7%A1%80" style="text-decoration:none; color:rgb(55,119,188)">计算几何基础

上传者

张云聪

開始做这道题时,自己一直在草稿纸上画。推断有多少种情况,仅仅是认为情况比較多,可能考虑的不全面,開始我就是依照以某一个点为顶点,然后写出判别条件。后来我自己写出来执行一看,得到的结果全是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 三点共线

nyis oj 68 三点顺序 (计算几何基础)的更多相关文章

  1. nyoj 68 三点顺序

    点击打开链接 三点顺序 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断A,B,C是顺时针给 ...

  2. 三点顺序_nyoj_68(计算几何).java

    三点顺序 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 3   描述 现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断A,B,C是顺时针给出的 ...

  3. nyoj_68_三点顺序_201404152013

    三点顺序 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断A,B,C是顺时针给出的还是逆 ...

  4. 【ACM】三点顺序

    三点顺序 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断A,B,C是顺时针给出的还是逆 ...

  5. (计算几何基础 叉积) nyoj68-三点顺序

    68-三点顺序 内存限制:64MB 时间限制:1000ms 特判: No通过数:27 提交数:43 难度:3 题目描述: 现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断 ...

  6. 二维计算几何基础题目泛做(SYX第一轮)

    题目1: POJ 2318 TOYS 题目大意: 给一个有n个挡板的盒子,从左到右空格编号为0...n.有好多玩具,问每个玩具在哪个空格里面. 算法讨论: 直接叉积判断就可以.注意在盒子的边界上面也算 ...

  7. Vue2.0源码阅读笔记(三):计算属性

      计算属性是基于响应式依赖进行缓存的,只有在相关响应式依赖发生改变时才会重新求值,这种缓存机制在求值消耗比较大的情况下能够显著提高性能. 一.计算属性初始化   Vue 在做数据初始化时,通过 in ...

  8. java se系列(三) 顺序语句、if...else、switch、While、do-while、for、break、continue

    1 顺序语句 语句:使用分号分隔的代码称作为一个语句. 注意:没有写任何代码只是一个分号的时候,也是一条语句,称作空语句. 顺序语句就是按照从上往下的顺序执行的语句. 2 判断(if…else) 什么 ...

  9. 【BZOJ】1043: [HAOI2008]下落的圆盘(计算几何基础+贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1043 唯一让我不会的就是怎么求圆的周长并QAAQ... 然后发现好神!我们可以将圆弧变成$[0, 2 ...

随机推荐

  1. python中round(四舍五入)的坑

    python中的round函数不能直接拿来四舍五入,一种替代方式是使用Decimal.quantize()函数. 具体内容待补. >>> round(2.675, 2) 2.67 可 ...

  2. CentOS 7.2 下 PXE+kickstart 自动安装系统

    一.简单概述 1.1 Kickstart 概述 对于网络安装系统,在linux 下面最熟悉的应该就是 Kickstart 以及 cobbler.写这篇文章的目的在于我公司目前使用的就是 Kicksta ...

  3. HTML5 Canvas游戏开发(二)高级功能

    一.变形 1.放大和缩小 scale(X,Y)函数. 当使用该函数时,其起始坐标值也被放大或缩小.当X.Y为负值时,可以实现翻转. 2.平移变换 translate(X,Y)函数. 表示水平方向向左移 ...

  4. Python学习之字符串格式化

    Table 3.1. 字符串格式化代码 格式 描述 %% 百分号标记% %c 字符及其ASCII码 %s 字符串 %d 有符号整数(十进制) %u 无符号整数(十进制) %o 无符号整数(八进制) % ...

  5. CAT 3.0 开源发布,支持多语言客户端及多项性能提升

    项目背景 CAT(Central Application Tracking),是美团点评基于 Java 开发的一套开源的分布式实时监控系统.美团点评基础架构部希望在基础存储.高性能通信.大规模在线访问 ...

  6. 不要62 hdu 2089 dfs记忆化搜索

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意: 给你两个数作为一个闭区间的端点,求出该区间中不包含数字4和62的数的个数 思路: 数位dp中 ...

  7. JavaQuery

    1.初识jQuery <!DOCTYPE html>   <html>   <head lang="en">   <meta charse ...

  8. KVM libvirt的CPU热添加

    一. NUMA1. NUMA 介绍    早期的时候,每台服务器都是单CPU,随着技术的发展,出现了多CPU共同工作的需求.    NUMA(Non-Uniform Memory Access,非一致 ...

  9. JavaSE基础之矩阵运算

    JavaSE基础之矩阵运算 1.矩阵类:Matrix.java 包括矩阵的加.乘运算,行列式的求解,最大最小元素等 package cn.com.zfc.help; import java.text. ...

  10. POJ 3155 Hard Life 最大密度子图 最大权闭合图 网络流 二分

    http://poj.org/problem?id=3155 最大密度子图和最大权闭合图性质很相近(大概可以这么说吧),一个是取最多的边一个是取最多有正贡献的点,而且都是有选一种必须选另一种的限制,一 ...