【无聊】判断一点是否在三角形内。(面积法)

本文介绍了一种通过计算叉积来判断一个点是否位于由三个已知顶点构成的三角形内部的方法。该方法利用了三角形面积计算原理,并通过C++代码实现了具体的算法流程。

判断一点是否在三角形内:假设三角形三个顶点坐标都知道分别为a,b,c.

都知道三角形的面积可以是二分之一两边长乘上他们的夹角sin。

而叉积的计算也是|a||b|sin@。所以可以利用面积是否相等来判断一点d是否在三角形内。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <queue>
#include <map>
#include <stack>
#include <list>
#include <vector>
#include <ctime>
#define LL __int64
#define EPS 1e-8
using namespace std;
struct point
{
	double x,y;
	point (double x=0,double y=0):x(x),y(y){}
}a,b,c,d;
point operator - (point a,point b)
{
	return point(a.x-b.x,a.y-b.y);
}
double cross(point a,point b)
{
	return fabs(a.x*b.y-a.y*b.x);
}
int main()
{
	begin:
	printf("请输入三角形的三个顶点坐标:\n");
	scanf("%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y);
	printf("请输入要判断的点的坐标,如若想重新输入三角形顶点,请输入0 0\n");
	while (~scanf("%lf%lf",&d.x,&d.y))
	{
		if (fabs(d.x)<=EPS && fabs(d.y)<=EPS)
			goto begin;
		point A,B,C;
		A=a-d;
		B=b-d;
		C=c-d;
		double s,s1;
		s=cross(A,B)/2+cross(A,C)/2+cross(B,C)/2;
		s1=cross(c-b,a-b)/2;
		//cout<<s<<" "<<s1<<endl;
		if (fabs(s-s1)<EPS) printf("此点(%lf,%lf)在三角形内\n",d.x,d.y);
		else printf("此点(%lf,%lf)不在三角形内\n",d.x,d.y);
	}
	return 0;
}


### 面积判断是否三角形内的C++代码实现 以下是使用面积判断是否三角形内的C++代码示例。该方通过计算三角形的总面积以及由测试三角形构成的三个子三角形面积,来判断测试是否位于三角形内部。 ```cpp #include <iostream> #include <cmath> using namespace std; // 计算三角形面积的函数 float area(int x1, int y1, int x2, int y2, int x3, int y3) { return abs((x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2.0); } // 判断是否三角形内 bool isInside(int x1, int y1, int x2, int y2, int x3, int y3, int x, int y) { // 计算三角形ABC的总面积 float A = area(x1, y1, x2, y2, x3, y3); // 计算三角形PBC的面积 float A1 = area(x, y, x2, y2, x3, y3); // 计算三角形PAC的面积 float A2 = area(x1, y1, x, y, x3, y3); // 计算三角形PAB的面积 float A3 = area(x1, y1, x2, y2, x, y); // 如果总面积等于三个子三角形面积之和,则三角形内 if (A == A1 + A2 + A3) return true; else return false; } int main() { // 定义三角形的三个顶坐标 int x1 = 0, y1 = 0; int x2 = 20, y2 = 0; int x3 = 10, y3 = 30; // 定义测试坐标 int x = 10, y = 15; // 判断测试是否三角形内 if (isInside(x1, y1, x2, y2, x3, y3, x, y)) cout << "Inside"; else cout << "Not Inside"; return 0; } ``` 上述代码中,`area` 函数用于计算三角形面积[^3],而 `isInside` 函数则根据面积判断是否位于三角形内部。如果测试三角形构成的三个子三角形面积之和等于原三角形的总面积,则测试位于三角形内部[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值