计算几何(一)三点顺序

1.问题描述

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

计算几何(一)三点顺序_第1张图片

输入:

每一行是一组测试数据,有6个整数X1,Y1,X2,Y2,X3,Y3分别表示A、B、C三点的横纵坐标(坐标值都在0到10000之间),输入000000表示输入结束,测试数据不超过10000组。

输出:

三点顺时针,输出1;逆时针,输出0.

样例输入:

0  0  1  1 1  3

0  1  1  0  0  0

0  0  0  0  0  0 

样例输出:

0

 2.问题分析

利用矢量叉积判断是逆时针还是顺时针。

设A(X1,Y1), B(X2,Y2) , C(X3,Y3),则AB = (X2 - X1,Y2 - Y1),AC = (X3-X1,Y3-Y1),则AB和AC的叉积为

AB × AC = (X2-X1) * (Y3-Y1) - (Y2-Y1) * (X3-X1).

利用右手法则判断:

AB × AC >0,三角形ABC逆时针;

AB × AC <0,三角形ABC顺时针;

AB × AC=0,A、B、C共线。

3.代码实现

#include
using namespace std;
int main()
{
	int X1,X2,X3,Y1,Y2,Y3,S;
	while(cin>>X1>>X2>>X3>>Y1>>Y2>>Y3)
	{
		if(X1==0 && X2==0 && X3==0 && Y1==0 && Y2==0 && Y3==0)
			break;
		S=(X2 - X1)*(Y3 - Y1) -(Y2 - Y1)*(X3 - X1);
		if(S < 0)
			cout<<0<

 

你可能感兴趣的:(天天练,计算几何)