HDU 2857 Mirror and Light [计算几何]
来源:互联网 发布:caxa画图软件 编辑:程序博客网 时间:2024/06/13 01:38
Description
给一条直线和两个点,这两个点是由那条直线反射得到,求反射的那个点
Algorithm
求对称点
求两直线交点
Code
#include <cstdio>#include <cmath>#include <iostream>using namespace std;const double eps = 1e-10;double add (double a, double b){ if (abs(a + b) < eps * (abs(a) + abs(b))) return 0; return a + b;}struct P{ double x, y; P(){} P(double x, double y):x(x),y(y){} P operator + (P p) { return P(add(x, p.x), add(y, p.y)); } P operator - (P p) { return P(add(x, -p.x), add(y, -p.y)); } P operator * (double d) { return P(x * d, y * d); }};double det(P p1, P p2){ return add(p1.x * p2.y, -p1.y * p2.x);}bool g_equal(double a, double b){ if (a > b - eps && a < b + eps) return true; return false;}//求p关于p1, p2所成直线的对称点P symmetric_point(P p, P p1, P p2){ //直线与x轴垂直 if (g_equal(p1.x, p2.x)) return P(2 * p1.x - p.x, p.y); double k = (p1.y - p2.y ) / (p1.x - p2.x); if (g_equal(k, 0)) return P(p.x, 2 * p1.y - p.y); double x = (2*k*k*p1.x + 2*k*p.y - 2*k*p1.y - k*k*p.x + p.x) / (1 + k * k); double y = p.y - (x - p.x) / k; return P(x, y);}P intersection(P p1, P p2, P q1, P q2){ return p1 + (p2 - p1) * (det(q2 - q1, q1 - p1) / det(q2 - q1, p2 - p1));}void solve(){ P p1, p2, ps, pe; cin >> p1.x >> p1.y >> p2.x >> p2.y >> ps.x >> ps.y >> pe.x >> pe.y; ps = symmetric_point(ps, p1, p2); P ans = intersection(p1, p2, ps, pe); printf("%.3lf %.3lf\n", ans.x, ans.y);}int main(){ int t; cin >> t; for (int i = 0; i < t; i++) solve();}
0 0
- HDU-2857-Mirror and Light(计算几何)
- HDU 2857 Mirror and Light [计算几何]
- HDU 2857 Mirror and Light (计算几何求 对称点和两直线的交点)
- HDU 2857 Mirror and Light(几何,求对称点)
- hdu 2587 Mirror and Light
- hdu 2857 Mirror and Light 求 两直线交点
- hdu 2857 Mirror and Light(直线交点)
- [ACM] hdu 2857 Mirror and Light (对称点+两条直线的交点)
- Mirror and Light (点与直线)
- HDOJ 题目2857 Mirror and Light(关于直线对称点,直线交点)
- 【计算几何】ZOJ 2976 Light Bulbs
- zoj 3203 Light Bulb(计算几何)
- ZOJ 3203 Light Bulb (三分+计算几何)
- hdu-1221--Rectangle and Circle(计算几何)
- hdu 4720 Naive and Silly Muggles (计算几何)
- HDU 4720 Naive and Silly Muggles(计算几何)
- hdu 3952 计算几何
- HDU 3694计算几何
- 百钱买百鸡
- OSI七层
- Git操作
- u-boot分析 四 (程序入口start.S)
- 编写c#程序,输出平均分和高于平均分的同学
- HDU 2857 Mirror and Light [计算几何]
- Nginx的安装,启动,停止,日志分割,从容停止,平滑升级
- 支持向量机理解
- Android 中各种文件输入输出流
- oracle基于odbc建立dblink访问sqlserver
- iOS极光整合
- 按钮带动画效果(1)
- 设计模式之单例模式
- 这是我的第一篇博客