---恢复内容开始---

今天无事水一水,结果就看到这个水题了!

题意思是 有俩个区域如图

求在俩个圆之间的运动时间 给出 初始的开始点和速度的矢量式;而且这个点 不再俩个圆之间的区域,且碰到内测园会反弹:

在大大物实验的时候记得学过为了减少误差 和简易计算可以:把这个小圆看成质点,并把固定园的半径加上小圆的半径。

  其实就是求 与俩个圆与射线的交点! 代码如下:()

  

#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
using namespace std;
struct point
{double x,y;point (double x=0,double y=0):x(x),y(y){}
};
typedef point Vector;
const double eps=1e-8;
int dcmp(double x)
{if(fabs(x)<eps) return 0;return x<0?-1:1;
}
Vector operator + (Vector a,Vector b){return Vector(a.x+b.x,a.y+b.y);}
Vector operator - (Vector a,Vector b){return Vector(a.x-b.x,a.y-b.y);}
Vector operator * (Vector a,double b){return Vector(a.x*b,a.y*b);}double det(Vector a,Vector b){return a.x*b.y-a.y*b.x;}
double dot(Vector a,Vector b){return a.x*b.x+a.y*b.y;}
double lenth(Vector a){return sqrt(dot(a,a));}
struct line
{point p;Vector v;double angle;line(){}line(point p,Vector v):p(p),v(v){}bool operator <(const line &rht)const{return angle<rht.angle;}
};
struct circle
{point c;double r;circle(){c=point(0.0,0.0);}circle(point c,double r):c(c),r(r){}point Point(double rad){return point(c.x+cos(rad)*r,c.y+sin(rad)*r);}
};
int get_circle_intersection(line L,circle C,double &t1,double &t2)
{t1=t2=0;double a=L.v.x, b=L.p.x-C.c.x,c=L.v.y,d=L.p.y-C.c.y;double e=a*a+c*c,f=2*(a*b+c*d),g=b*b+d*d-C.r*C.r;double detle = f*f-4*e*g;if(dcmp(detle)<0) return 0;if(dcmp(detle)==0) {t1=t2=-f/(2*e);return 1;}t1=(-f-sqrt(detle)) /(2*e);t2=(-f+sqrt(detle)) /(2*e);if(dcmp(t1)<0 || dcmp(t2)<0) return 0;//按照速度的反方向才可以和圆相交return 2;
}
int main()
{double t1,t2;double x1,x2;line tmp;circle tmp1;circle tmp2;double Rm, R, r;while(~scanf("%lf %lf %lf %lf %lf %lf %lf",&Rm,&R,&r,&tmp.p.x,&tmp.p.y,&tmp.v.x,&tmp.v.y)){Rm+=r;R+=r;tmp1.r=Rm;tmp2.r=R;int count1=get_circle_intersection(tmp,tmp1,t1,t2);int count2=get_circle_intersection(tmp,tmp2,x1,x2);if(count2==0)printf("0.00\n");elseprintf("%.3lf\n",fabs(x2-x1)-fabs(t1-t2));// 因为直线式点+向量(和速度一样)所以减法就可以了}return 0;
}

  

转载于:https://www.cnblogs.com/shuly/p/3751058.html

ZOJ 3728 Collision相关推荐

  1. css中文字段落对齐,CSS段落对齐方式

    CSS段落对齐有两种方式:水平对齐和垂直对齐. 1.水平对齐: (1).text-align:left;         //左对齐 (2).text-align:right;      //右对齐 ...

  2. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  3. ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!

    两题水题: 1.如果一个数能被分解为两个素数的乘积,则称为Semi-Prime,给你一个数,让你判断是不是Semi-Prime数. 2.定义F(0) = 7, F(1) = 11, F(n) = F( ...

  4. zoj 1204 Additive equations

    ACCEPT acm作业 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=204 因为老师是在集合那里要我们做这道题.所以我很是天 ...

  5. 【HDU/POJ/ZOJ】Calling Extraterrestrial Intelligence Again (素数打表模板)

    http://poj.org/problem?id=1411  POJ http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=168 ...

  6. 模拟 ZOJ 3878 Convert QWERTY to Dvorak

    题目传送门 1 /* 2 模拟:手敲map一一映射,累! 3 除了忘记读入字符串不能用gets用getline外还是很顺利的AC了:) 4 */ 5 #include <cstdio> 6 ...

  7. 矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence

    题目传送门 1 /* 2 题意:加上适当的括号,改变计算顺序使得总的计算次数最少 3 矩阵连乘积问题,DP解决:状态转移方程: 4 dp[i][j] = min (dp[i][k] + dp[k+1] ...

  8. ZOJ 3597 Hit the Target! (线段树扫描线 -- 矩形所能覆盖的最多的点数)

    ZOJ 3597 题意是说有n把枪,有m个靶子,每把枪只有一发子弹(也就是说一把枪最多只能打一个靶子), 告诉你第 i 把枪可以打到第j个靶, 现在等概率的出现一个连续的P把枪,在知道这P把枪之后,你 ...

  9. 九度OJ—题目1032:ZOJ

    题目描写叙述: 读入一个字符串.字符串中包括ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出.当某个字符用完时,剩下的仍然依照ZOJ的顺序输出. 输入: 题目包括多组用例,每组用例占一行,包括ZOJ ...

最新文章

  1. 数字资产交易所IM即时通讯社交系统APP开发
  2. GNU make 工具
  3. [POI2007]堆积木Klo
  4. (计算机组成原理)第二章数据的表示和运算-第一节5:本章习题
  5. [转] ASP.NET中使用javascript
  6. 关于Tomcat 的一些配置和启动
  7. mysql参数优化和硬件优化等分享
  8. Winhex数据恢复笔记(五)
  9. 网易编程题-操作序列
  10. ubuntu目录结构
  11. 程序员写文档工具推荐,让你爱上写文档!
  12. WAP加密和WEP加密比较
  13. 计算机网络笔记 韩立刚(物理层+数据链路层+网络层+传输层已完成)
  14. 多模块初始化解决方案
  15. 大数据、java、python、区块链、人工智能发展前景
  16. LeetCode(1292):元素和小于等于阈值的正方形的最大边长 Maximum Side Length of a Square(Java)
  17. 探索ESP8285(2)搭建Windows版MQTT服务器
  18. 有哪些项目能够自助对外服务器,企业租用服务器有什么用途?
  19. 嵌入式学习之QT学习---14 QT跨平台运行之把QT程序交叉编译到ARM开发板
  20. 数值分析 $4 最小二乘法

热门文章

  1. 简明python教程购买-自学Python买什么书?
  2. python.freelycode.com-Python字节码介绍
  3. python读数据-如何用 Python 读取数据?
  4. python语言编程模式是啥-Python的设计模式编程入门指南
  5. 函数式编程语言python-写 Python 代码不可不知的函数式编程技术
  6. python三层装饰器-2020 python学习第十六天————三层装饰器与迭代器
  7. python乘法口诀代码-python---九九乘法表代码
  8. python基础语法手册format-python基础_格式化输出(%用法和format用法)
  9. 想学python看什么书-我以前从没学过编程,学Python看什么书?
  10. python处理数据的优势-Python处理excel的优点