Тема: informatic.mccme.ru (Geometry)
Постройте отражение
Заданы коэффициенты уравнения прямой a, b и с и координаты точки A (xa, ya). Найдите точку A’, которая является отражением точки A относительно заданной прямой.
Исходные данные: в начале с клавиатуры вводятся коэффициенты уравнения прямой, затем координаты точки A. Исходные данные являются целыми числами, по модулю не превышающими 1000
Результат: выведите координаты точки A’ с точностью до пятого знака после запятой.
input #1
1 0 0 3 1
output #1
-3 1
input #2
1 -1 0 1 0
output #2
0 1
#include <iostream>
#include <cmath>
using namespace std;
struct Point {
double x,y;
Point()
{
x=y=0;
}
Point(double xx,double yy)
{
x=xx;
y=yy;
}
void read()
{
scanf("%lf%lf",&x,&y);
}
Point operator-(Point a)
{
return Point(x-a.x,y-a.y);
}
double operator*(Point a)
{
return x*a.y-y*a.x;
}
double scal(Point a)
{
return x*a.x+y*a.y;
}
void makeLen(double l)
{
double dist = sqrt(x*x+y*y);
x*=l/dist;
y*=l/dist;
}
};
double a,b,c;
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
scanf("%lf%lf%lf",&a,&b,&c);
Point p ;
p.read();
double l = fabs(a*p.x+b*p.y+c)/sqrt(a*a+b*b);
Point norm = Point(a,b);
Point p1;
if (a!=0) p1= Point(-c/a,0); else
p1 = Point(0,-c/b);
if (norm.scal(p1) < 0 ) norm.x*=-1,norm.y*=-1;
norm.makeLen(l);
Point p2 = p - norm;
printf("%.5lf %.5lf",p2.x - norm.x , p2.y-norm.y);
return 0;
}
Помогите плз , WA #3 тест. Че за проблема . Я думаю ошибка из за погрешности.