UVA 10112 Myacm三角形

本文介绍了一种简单高效的算法,用于判断给定点是否位于已知三角形的内部。通过计算三角形各个边形成的面积并与点到各边形成的小三角形面积比较,实现了准确判断。此算法广泛应用于计算机图形学、CAD等领域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:http://blog.youkuaiyun.com/frankiller/article/details/7730627

关键在想到一个简单好用的

“判断点是否在三角形内部”

#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <cctype>
#include <algorithm>
#include <cmath>
#include <deque>
#include <map>
#include <iomanip>
using namespace std;
///
#define INF 0xffffff7
#define maxn 2000
///
double area(int x1,int y1,int x2,int y2,int x3,int y3)
{
	return fabs(0.5*((y3-y1)*(x2-x1)-(y2-y1)*(x3-x1)));
}

int main()
{
	///
	
	int  x[16],y[16],n,i,j,k,A,B,C,p,flag;
	double s,sarea;
	char point[16];  //点的坐标号码
	while (scanf("%d",&n),n)
	{
		for (i=1;i<=n;i++)
		{
			getchar();
			scanf("%c %d %d",&point[i],&x[i],&y[i]);
		}
		sarea=0; 
		for (i = 1; i <= n - 2; i++)
			for (j = i + 1; j <= n - 1; j++)
				for (k = j + 1; k <= n; k++)
				{
					s = area(x[i],y[i],x[j],y[j],x[k],y[k]);
					flag = 1;
					for (p = 1; p <= n; p++)
						if (!((p == i)||(p == j)||(p == k))) 
						{
							if (s == area(x[i],y[i],x[j],y[j],x[p],y[p]) + area(x[i],y[i],x[p],y[p],x[k],y[k]) + area(x[p],y[p],x[j],y[j],x[k],y[k]))
							{
								flag=0;
								break;
							}
						}
					if ((flag)&&(s > sarea)) 
					{
						sarea = s; 
						A = i; 
						B = j;
						C = k;
					}
				}
				printf("%c%c%c\n", point[A], point[B], point[C]);
	}

		
    ///
    return 0;
	
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值