hdu 4793 Collision(几何)
来源:互联网 发布:windows hadoop 2.7.0 编辑:程序博客网 时间:2024/05/16 19:40
题目链接:hdu 4793 Collision
代码
#include <cstdio>#include <cstring>#include <cmath>#include <vector>#include <algorithm>using namespace std;const double pi = 4 * atan(1);const double eps = 1e-6;inline int dcmp(double x) { if (fabs(x) < eps) return 0; else return x < 0 ? -1 : 1; }inline double torad(double deg) { return deg / 180 * pi; }struct Point { double x, y; Point (double x = 0, double y = 0): x(x), y(y) {} void read() { scanf("%lf%lf", &x, &y); } Point operator + (const Point& p) { return Point(x+p.x, y+p.y); } Point operator - (const Point& p) { return Point(x-p.x, y-p.y); }};typedef Point Vector;double getDot (Vector a, Vector b) { return a.x * b.x + a.y * b.y; }//double getCross (Vector a, Vector b) { return a.x * b.y - a.y * b.x; }double getLength (Vector a) { return sqrt(getDot(a, a)); }struct Circle { Point o; double r; Circle() {} Circle(Point o, double r): o(o), r(r) {}};int getLineCircleIntersection(Point p, Vector v, Circle O, double& t1, double& t2) { double a = v.x, b = p.x - O.o.x, c = v.y, d = p.y - O.o.y; double e = a*a+c*c, f = 2*(a*b+c*d), g = b*b+d*d-O.r*O.r; double delta = f*f - 4*e*g; if (dcmp(delta) < 0) return 0; if (dcmp(delta) == 0) { t1 = t2 = -f / (2*e); return 1; } t1 = (-f - sqrt(delta)) / (2*e); t2 = (-f + sqrt(delta)) / (2*e); return 2;}double Rm, R, r, X, Y, VX, VY;int main () { while (scanf("%lf%lf%lf%lf%lf%lf%lf", &Rm, &R, &r, &X, &Y, &VX, &VY) == 7) { double t1, t2, ans = 0; Point P = Point(X, Y); Vector V = Vector(VX, VY); int tmp = getLineCircleIntersection(P, V, Circle(Point(0, 0), Rm+r), t1, t2); if (tmp && dcmp(t1) >= 0) { double k = t1; getLineCircleIntersection(P, V, Circle(Point(0, 0), R+r), t1, t2); ans = (2 * k - t1 - max(t1, 0.0)); } else if (getLineCircleIntersection(P, V, Circle(Point(0, 0), R+r), t1, t2)) { t1 = max(t1, 0.0); t2 = max(t2, 0.0); ans = (t2-t1); } printf("%.3lf\n", ans); } return 0;}
0 0
- hdu 4793 Collision(几何)
- HDU 4793 Collision 【计算几何】
- HDU 4793 Collision【计算几何】
- HDU 4793 Collision【计算机几何】【经典】
- HDU-4793 Collision 计算几何 解方程
- HDU 4793 Collision + HDU 4798 Skycity 简单几何
- HDU 4793 Collision(计算几何)——2013 Asia Changsha Regional Contest
- HDU - 4793 Collision
- HDU 4793 Collision
- hdu-4793-Collision
- HDU 4793 Collision
- Collision (hdu-5114)
- HDU 4793 Collision --解方程
- hdoj 2436 Collision Detection(数学型计算几何)
- hdu 2436 Collision Detection(数学问题)
- ZOJ 3728 Collision 简单几何
- ZOJ 3728 Collision (计算几何)
- ZOJ 3728 Collision 计算几何
- 线程安全(java)
- 10011---JavaWeb基础---JSP概述
- jquery实现密码和确认密码的输入框中不能复制,粘贴,剪切,和右键
- Checklists学习日志之建立存储文件用的地址
- poj1330 Nearest Common Ancestors
- hdu 4793 Collision(几何)
- OPENCV中BFMatcher(BruteForceMatcher)和FlannBasedMatcher区别
- [证书]1、iOS申请证书,Certificates, Identifiers &Profiles 简介
- 欢迎使用CSDN-markdown编辑器
- hdu 4798 Skycity(几何)
- 锁优化-java
- 手机上Menu 按键的初步认识【1】
- 如何免 sudo 使用 docker
- 苹果开发——设置iTunes Connect中的Contracts, Tax, and Banking