HDU 4793 2013 Changsha Regional Collision[简单的平面几何]

news/2024/12/13 14:27:57

圆形奖章给定半径的半径和圆形区域。另一个硬币的半径,然后在桌面上平稳。给定硬币的速(的大小和方向,vx,vy)和坐标(奖牌同心圆形区域,圆和心脏为源),Q币在一个圆形区域和多少下滑(不管是什么圆形区域的一部分被认为是),币碰到圆奖牌会反弹。能量不变(速度不变)

第一次做平面几何题

看了题解,题解的板子真好用

大概来说有三种情况。例如以下图

第一种是进入圆区而不碰撞,查看h和Rm+r的关系

另外一种是进入圆区且碰撞,查看h和Rm+r的关系

第三种是不进入圆区。查看方向向量和圆心到初始点向量这两个向量的夹角还有h和R+r的关系。并且应该先看向量,也能够先看R+r再讨论向量

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <string>
#include <set>
#define PI acos(-1.0)
#define maxn 100005
#define INF 0x7fffffff
#define eps 1e-8
using namespace std;
int cmp(double x) {if(fabs(x)<eps)return 0;if(x>0)return 1;return -1;
}
inline int sgn(double n) {return fabs(n)<eps?

0:(n<0?-1:1); } inline double sqr(double x) { return x*x; } struct point{ double x,y; point() {} point(double a,double b):x(a),y(b) {} void input() { scanf("%lf%lf",&x,&y); } friend point operator + (const point &a,const point &b) { return point(a.x+b.x,a.y+b.y); } friend point operator - (const point &a,const point &b) { return point(a.x-b.x,a.y-b.y); } friend bool operator == (const point &a,const point &b) { return cmp(a.x-b.x)==0 &&cmp(a.y-b.y)==0; } friend point operator * (const point &a,const double &b) { return point(a.x*b,a.y*b); } friend point operator * (const double &a,const point &b) { return point(a*b.x,a*b.y); } friend point operator / (const point &a,const double &b) { return point(a.x/b,a.y/b); } double norm() { return sqrt(sqr(x)+sqr(y)); }//到原点距离 void out () const { printf("%.2f %.2f",x,y); } }; double det (const point &a,const point &b) { return a.x*b.y-a.y*b.x; }//叉积 double dot (const point &a,const point &b) { return a.x*b.x+a.y*b.y; }//点乘 double dist (const point &a,const point &b) { return (a-b).norm(); }//距离 point rotate_point(const point &p,double A) { double tx=p.x,ty=p.y; return point (tx*cos(A)-ty*sin(A),tx*sin(A)+ty*cos(A)); }//旋转,A是弧度 struct line { point a,b; line() {} line(point x,point y):a(x),b(y) {} point dire()const { return b-a; }//向量 double len() { return dire().norm(); } }; bool parallel(line a,line b) { return !cmp(det(a.a-a.b,b.a-b.b)); } bool line_make_point (line a,line b,point &res) { if(parallel(a,b)) return false; double s1=det(a.a-b.a,b.b-b.a); double s2=det(a.b-b.a,b.b-b.a); res=(s1*a.b-s2*a.a)/(s1-s2); return true; } int main() { #ifndef ONLINE_JUDGE freopen("/home/rainto96/in.txt","r",stdin); #endif double Rm,R,r,x,y,vx,vy; while(~scanf("%lf%lf%lf%lf%lf%lf%lf",&Rm,&R,&r,&x,&y,&vx,&vy)){ point s=point(x,y); point dir=point(vx,vy); if(dot(s,dir)>=0){ printf("0.000\n"); continue; } point tmp=point(vy,-vx); line l1=line(point(0,0),tmp); line l2=line(s,point(s.x+vx,s.y+vy)); point ans; line_make_point(l1,l2,ans); double h=ans.norm(); double h1=R+r; double h2=Rm+r; double speed=sqrt(vx*vx+vy*vy); if(h>=h1){ printf("0.000\n"); continue; } if(h>=h2){ double time=sqrt(h1*h1-h*h)/speed*2; printf("%f\n",time); continue; }else{ double time=sqrt(h1*h1-h*h)-sqrt(h2*h2-h*h); time=time/speed*2; printf("%f\n",time); continue; } } return 0; }



版权声明:本文博客原创文章,博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/zfyouxi/p/4648843.html


https://dhexx.cn/news/show-17218.html

相关文章

接受教训

今天开会讨论关于 手机微网站使用何种支付方式。 关于这个东东&#xff0c;已经调研了半个月了&#xff0c;昨晚总监写文档写到了半夜12点&#xff08;本来是分配给我的任务&#xff09;。 其实boss想知道的就是怎么在网上开店&#xff0c;资金不进公司账户&#xff0c;而进入…

jenkins 使用过程中常见问题汇总

1 Jenkins安装插件很慢的解决方法Jenkins安装插件很慢的解决方法 - 民工黑猫 - 博客园 2 jenkins web界面显示中文&#xff08;装两个插件&#xff0c;看第二篇&#xff09;jenkins转换显示语言为中文简体&#xff08;jenkins汉化&#xff09;。_w294954902的博客-CSDN博客_jen…

蓝翔技校是怎么做营销的?

原文地址&#xff1a;http://www.xcf.cn/gdyw/201409/t20140919_639308.htm 回顾过去不难发现&#xff0c;这家位于山东的教育培训机构一直以来擅长营销&#xff0c;从不缺乏舆论声音。他们的营销手法多样&#xff0c;从电视到微博&#xff0c;从电影到段子。多知网根据已有的素…

iOS手势识别的详细介绍

1、UIGestureRecognizer介绍 手势识别在iOS上非常重要&#xff0c;手势操作移动设备的重要特征&#xff0c;极大的增加了移动设备使用便捷性。iOS系统在3.2以后&#xff0c;为方便开发这使用一些常用的手势&#xff0c;提供了UIGestureRecognizer类。手势识别UIGestureRecogniz…

jenkins持续集成入门2 - 从gitlab中拉取代码(http的git地址),凭证类型用 Username with password的方式

1 jenkins下载插件 Credentials Binding&#xff0c;就是凭证管理的插件 2 添加一个用户名&#xff0c;密码方式的凭证&#xff0c;也可以在添加项目的时候&#xff0c;顺带创建&#xff0c;这里写的是gitlab的用户和密码 3 创建项目&#xff0c;类型为自由风格的&#xff0c;核…

Enterprise Solution 2.3

1. 登陆窗体和主界面增加语言选项&#xff0c;同时可记住用户登陆的语言和数据库。 2. 主界面的树功能可记住上次打开的模块菜单。 3. 修复主界面菜单生成问题和导航图区上下文菜单生成问题。 4. 增加自动更新功能。可以将最新的程序包部署到HTTP服务器上&#xff0c;主界面的C…

Windows Phone 7 中常用Task

1、//PhoneCallTask &#xff1a;打电话 private void btnPhoneCall_Click(object sender, RoutedEventArgs e) { PhoneCallTask task new PhoneCallTask(); task.PhoneNumber "110"; task.DisplayName "秋月光璇"; task.Show(); } 2、//Sm…

jenkins持续集成入门3 - 从gitlab中拉取代码(SSH的git地址),凭证类型用 SSH Username with private key的方式

1 jenkins下载插件 Credentials Binding&#xff0c;就是凭证管理的插件 2 用 ssh-keygen -t rsa -C "gitlab的用户名或邮箱"&#xff0c;生成密钥 3 在gitlab中添加 生成的公钥 4 jenkins中添加一个ssh的凭证&#xff0c;这里写的是私钥&#xff0c;注意用户名和 生…

[Leetcode] Sort Colors

[1] http://blog.csdn.net/lanxu_yy/article/details/11907615 每当遇到0&#xff0c;则放到当前可放置的最左端‘如果遇到2&#xff0c;则放到当前可放置位置的最右边。 具体的过程&#xff1a; 如果当前元素是2&#xff0c;那么将其交换到最右边&#xff0c;rightindex--&…

Ajax杂项-选看

u ajax的省市联动案例(如何动态的从服务器取得数据) showCities.php页面 <html> <head> <meta http-equiv"content-type" content"text/html;charsetutf-8"/> <script type"text/javascript"> //创建ajax引擎 func…