今天看到了用这个来判断一个点是否在多边形内,但是WA哭了...有无大佬给指正一下QAQ
解析式不知道为什么求出来是inf、nan啥的。
#include<bits/stdc++.h>
#define int long long
#define DB long double
#define N 1000100
using namespace std;
string s[10];
int x[10],y[10],ans;
inline void zhuan(string s,int i)
{
int p=1,o=1;
while(s[p]>='0'&&s[p]<='9')x[i]=x[i]*o+s[p]-'0',o*=10,p++;
p++,o=1;
while(s[p]>='0'&&s[p]<='9')y[i]=y[i]*o+s[p]-'0',o*=10,p++;
}
signed main()
{
for(int i=1;i<=4;i++)cin>>s[i],zhuan(s[i],i);
for(int i=1;i<=3;i++)if(x[4]==x[i]&&y[4]==y[i]){cout<<"4"<<endl;return 0;}
for(int i=1;i<=3;i++)//枚举判断解析式
{
for(int j=i+1;j<=3;j++)
{
DB k=((DB)(y[i]-y[j]))/((DB)(x[i]-x[j]));
DB b=(DB)y[i]-(DB)k*x[i];
if(abs((DB)y[4]-(DB)x[4]*k+b)<1e-9&&x[4]>min(x[i],x[j])&&x[4]<max(x[i],x[j]))
{
cout<<"3"<<endl;
return 0;
}
}
}
// cout<<"3"<<endl;
// DB k=(y[1]-y[2])*1.0/(x[1]-x[2]);
// DB b=(DB)y[1]-(DB)k*x[1];
// DB xx=abs(x[1]-x[2])/2;
// DB yy=k*xx+b;
// k=(y[4]-yy)*1.0/(x[4]-xx);
// b=(DB)y[4]-(DB)k*x[4];
// cout<<k<<" "<<b<<endl;
// for(int i=1;i<=3;i++)
// {
// for(int j=i+1;j<=3;j++)
// {
// cout<<i<<" "<<j<<endl;
// DB kk=(y[i]-y[j])*1.0/(x[i]-x[j]);
// DB bb=(DB)y[i]-k*x[i];
// cout<<kk<<" "<<bb<<endl;
// DB cao=(bb-b)/(k-kk);
// if(cao>min(x[i],x[j])&&cao<max(x[i],x[j]))ans++;
// }
// }
// if(ans%2==1)cout<<"1"<<endl;
// else cout<<"2"<<endl;
// for(int i=1;i<=4;i++)
// cout<<"x:"<<x[i]<<" y:"<<y[i]<<endl;
// cout<<endl;
return 0;
}