HDU 2671 Can't be easier(数学题,点关于直线对称)
2014-06-21 15:22
555 查看
题目
//数学题
//直线 y = k * x + b
//直线 ax+by+c=0; 点 (x0,y0); 点到直线距离 d = (ax0+by0+c)/sqrt(a^2+b^2)
/*
*****************************************************************
关于直线对称公式如下:
1。点(a,b)关于直线 y=kx+m (k=1或-1)的
对称点为:(b/k-m/k,ka+m),实际上是将表达式中的x,y的值互换,
因为直线方程 y=kx+m 中有 x=y/k-m/k 且 y=kx+m,这种方法只适用于 k=1或-1
的情况。还可以推广为 曲线 f(x,y)=0关于直线 y=kx+m 的 对称曲线 为
f(y/k-m/k,kx+m)=0。
2.当 k不等于1或-1时,点(a,b)关于直线 Ax+By+C=0 的对称点为
(a-(2A*(Aa+Bb+C))/(A*A+B*B),b-(2B*(Aa+Bb+C))/(A*A+B*B)),
同样可以扩展到曲线关于直线对称方面,有 f(x,y)=0关于
直线 Ax+By+C=0 的对称曲线为
f(x-(2A*(Ax+By+C))/(A*A+B*B),y-(2B*(Ax+By+C))/(A*A+B*B))=0.
以上包含了所有关于直线对称的情况。
顺便把点关于点对称的也写在这,方便大家使用。
点(x,y)关于 点(a,b)对称点是 (2a-x,2b-y);
曲线 f(x,y)=0 关于 点(a,b)对称曲线为 f(2a-x,2b-y)=0。
*****************************************************************
*********************************************
设直线方程为Ax+By+C=0,两点为(x1,y1),(x2,y2)
(Ax1+By1+C)(Ax2+By2+C)>0
同侧
(Ax1+By1+C)(Ax2+By2+C)<0
异侧
*********************************************
*/
View Code
//数学题
//直线 y = k * x + b
//直线 ax+by+c=0; 点 (x0,y0); 点到直线距离 d = (ax0+by0+c)/sqrt(a^2+b^2)
/*
*****************************************************************
关于直线对称公式如下:
1。点(a,b)关于直线 y=kx+m (k=1或-1)的
对称点为:(b/k-m/k,ka+m),实际上是将表达式中的x,y的值互换,
因为直线方程 y=kx+m 中有 x=y/k-m/k 且 y=kx+m,这种方法只适用于 k=1或-1
的情况。还可以推广为 曲线 f(x,y)=0关于直线 y=kx+m 的 对称曲线 为
f(y/k-m/k,kx+m)=0。
2.当 k不等于1或-1时,点(a,b)关于直线 Ax+By+C=0 的对称点为
(a-(2A*(Aa+Bb+C))/(A*A+B*B),b-(2B*(Aa+Bb+C))/(A*A+B*B)),
同样可以扩展到曲线关于直线对称方面,有 f(x,y)=0关于
直线 Ax+By+C=0 的对称曲线为
f(x-(2A*(Ax+By+C))/(A*A+B*B),y-(2B*(Ax+By+C))/(A*A+B*B))=0.
以上包含了所有关于直线对称的情况。
顺便把点关于点对称的也写在这,方便大家使用。
点(x,y)关于 点(a,b)对称点是 (2a-x,2b-y);
曲线 f(x,y)=0 关于 点(a,b)对称曲线为 f(2a-x,2b-y)=0。
*****************************************************************
*********************************************
设直线方程为Ax+By+C=0,两点为(x1,y1),(x2,y2)
(Ax1+By1+C)(Ax2+By2+C)>0
同侧
(Ax1+By1+C)(Ax2+By2+C)<0
异侧
*********************************************
*/
#include<math.h> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int main() { int m; double k,ax,ay,bx,by,cx,cy; scanf("%d",&m); while(m--) { scanf("%lf",&k); scanf("%lf%lf%lf%lf%lf%lf",&ax,&ay,&bx,&by,&cx,&cy); double b1 = cy-k*cx; double A = k, B = -1, C = b1; //判断两点是否同侧 if((A * ax + B * ay + C) * ( A * bx + B * by + C) < 0)//同侧 { printf("%.2lf\n",sqrt((ax - bx) * (ax - bx) + (ay - by) * (ay - by))); } else { double xn = ax - (2 * A * (A * ax + B * ay + C)) / (A * A + B * B); double yn = ay - (2 * B * (A * ax + B * ay + C)) / (A * A + B * B); printf("%.2lf\n",sqrt((xn - bx) * (xn - bx) + (yn - by) * (yn - by))); } } return 0; }
View Code
相关文章推荐
- hdu 2671(点关于直线对称问题)
- HDU 2671 Can't be easier
- HDU 2671 Can't be easier 求点关于直线的对称点
- hdu 1466 计算直线的交点数 (数学)
- hdu 1791 Where is the little Jgshining?(数学题--平面几何--判断圆心和判断三点是否为同一直线)
- 点关于直线的距离、垂足、对称点公式
- HDU 3130 Sir Bedavere’s Bogus Division Solutions(数学)
- 已知点(x0,y0),ax+by+c=0,求点关于直线对称
- hdu 1466 计算直线的交点数(递推+数学)
- hdu 1466 计算直线的交点数 (数学)
- Hdoj 2671 Can't be easier
- HDU 2898 空间点关于直线旋转
- CodeForces 32E Hide-and-Seek(线段交,点关于直线对称点)
- 点关于直线的距离、垂足、对称点公式
- hdu 2857:Mirror and Light(计算几何,点关于直线的对称点,求两线段交点坐标)
- 「HDU - 2857」Mirror and Light(点关于直线的对称点)
- HDOJ 题目2857 Mirror and Light(关于直线对称点,直线交点)
- 数学题征解:存在一条直线穿过至少两个点且颜色全部相同
- 关于Strust的异常信息:java.lang.IllegalArgumentException: Resources cannot be null.
- 创建直线的问题 关于数组的问题