光线投射算法求助
查看原帖
光线投射算法求助
526519
Aisaka_Taiga楼主2023/5/30 18:26

今天看到了用这个来判断一个点是否在多边形内,但是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;
}
2023/5/30 18:26
加载中...