Написал функцию поворота прямой.
// Line - y = _k * x + _b
void Line::rotation(double angle) {
double temp = _k;
_k = (_k + tan(angle))/(1 - _k*tan(angle));
_b *= _k/temp;
}
double Line::rotationAngle(const Line &l) { // counterclock-wise from l to this
return atan((_k - l._k)/(1. + _k*l._k));
}
При вводе следующих данных
Line Line1(0, 0), Line2(2, 1);
cout << Line1;
cout << Line2;
Line1.rotation(Line2.rotationAngle(Line1));
cout << Line1;
Почему-то выдает следующее
y = 0x + 0
y = 2x + 1
y = 2x + -nan(ind)
Коэффициент повернутой прямой программа посчитала правильно (_k = 2), но почему-то потом не может поделить 2 на 2:
_b *= _k/temp;
Хотя если temp заменить 2, то все ок. Выдаст:
y = 2x + 0
Вроде бы никаких корней и делений на ноль. В чем причина?