欧拉计划难度15—25%的好题题解

题意:

给定 \(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");
}

欧拉计划难度15—25%的好题题解

上一篇:变量,常量,命名规范


下一篇:vue利用v-if解决查看更多(组件查看数据)组件内不更新数据的问题:v-if会重新渲染组件,v-show不会