题意:
给定 \(1000\) 个三角形的顶点坐标,问原点在多少个三角形内;
思路:
连结三角形顶点和原点,原点如果在三角形内会把三角形分成面积之和等于原三角形的三个三角形,叉积求一下原点和两两顶点构成三角形的面积与原三角形的面积,如果相等原点就在三角形内;
代码:
#include<bits/stdc++.h>
using namespace std;
struct node
{
double x,y;
}a[10005],b[10005],c[10005];
double area(node a,node b,node c)
{
return fabs((a.x-c.x)*(b.y-a.y)-(a.x-b.x)*(c.y-a.y))/2;
}
int main()
{
const int n=1000;
node O=(node){0,0};
for(int i=1;i<=1000;i++)
{
cin>>a[i].x>>a[i].y>>b[i].x>>b[i].y>>c[i].x>>c[i].y;
}
int ans=0;
for(int i=1;i<=1000;i++)
{
if(fabs(area(a[i],b[i],c[i])-area(a[i],b[i],O)-area(a[i],c[i],O)-area(b[i],c[i],O))<=1e-3)
{
ans++;
}
}
cout<<ans;
system("pause");
}