Rolling The Polygon Gym - 102222B

Rolling The Polygon Gym - 102222B

题意:

给你一个多边形,给你内部一个点Q,多边形在平面上滚动一周(当有一个边第二次触地滚动停止),问Q的轨迹长度

题解:

计算几何题目
自己一直不是很擅长也不是很想做,嫌麻烦,但是考了n次自己也不会n次,所以决定跳出舒适圈,开始攻克计算几何
我们注意多边形和目标点滚动的方式和轨迹,Q点每次移动轨迹都是一段弧,要求弧长就要知道半径和移动角度。
如图一次滚动,我们可以看出滚动角的顶点是p1,滚动角是p1,p2和p1,p3形成的夹角α,旋转角度就是180°-滚动角
因为都是一个图形内,所以其他边旋转角度是多少,Q就是多少。
现在知道Q的旋转角度,半径更好求就是Q到p1的距离
因为每个顶点都会是滚动角的顶点,所以求出Q到各顶点的距离,以及各个角
详细看代码
在这里插入图片描述

代码:

#include<bits/stdc++.h>
#define pii pair<int,int>
typedef long long ll;
using namespace std;
inline int read(){
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);
   return s*w;
}
const double PI=acos(-1.0);
double dis(pii x,pii y){
	return sqrt((x.first-y.first)*(x.first-y.first)+(x.second-y.second)*(x.second-y.second));
}
double angle(double r,pii x,pii y, pii z){
	double a=dis(y,z),b=dis(x,z),c=dis(x,y);
	double radian=acos(1.0*(a*a+c*c-b*b)/(2*a*c));
	return r*(PI-radian);
}
int main()
{
	int t,n,x,y;
	cin>>t;
	int cas=0;
	while(t--)
	{
		int n;
		cin>>n;
		vector<pii >v(n);
		for(int i=0;i<n;i++){
			cin>>x>>y;
			v[i]={x,y};
		}
		double ans=0.0;
		cin>>x>>y;
		for(int i=0;i<n;i++){
			double r=dis({x,y},v[i]);
			ans+=angle(r,v[(i-1+n)%n],v[i],v[(i+1+n)%n]);
		}
		printf("Case #%d: %.3f\n",++cas,ans);
	}
	return 0;
}

利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值