Задачи P и V нужно решать первыми.
На проверку сдается только класс.

P: Класс Point

Класс Point должен иметь два поля: x  типа double - координата по оси Ox, y - координата по оси Oy.

Для класса Point определить конструкторы

которые могут принимать следующие виды параметров:

Методы:

Перегрузить оператор << для вывода точки в виде (x, y) командой std::cout << p

Ввод Вывод
 Point Q(4, 7);
std::cout << Q << endl;
std::cout << Q.dist() << endl;
std::cout << Q.dist(-5, -1) << endl;
Point W(10, 0.5, true);
std::cout << W << endl;
std::cout << W.dist(Q) << endl;
(4, 7)
8.06226
12.0416
(8.77583, 4.79426)
5.26059

V: Класс Vector

Класс Vector наследуется от класса Point. В систему сдать программу с классами Vector и Point.

Реализовать возможность инициализации объекта класса Vector по двум точкам, четырем координатам в декартовой системе координат, при этом оставить у подкласса возможность базового класса создавать вектор по другой точке (вектору), двум координатам в декартовой системе координат.

Методы:

Ввод Вывод
Vector a(Point(4, 3));
Vector b(Point(4, -3));
std::cout << a << " " << b << endl;
std::cout << a.dot_product(b) << endl;
Vector c(Point(-3, 4));
std::cout << a * c << endl;
std::cout << a.dist() << endl;
std::cout << a.cross_product(b) << endl;
std::cout << (b ^ c)  << endl;
Vector d(Point(4, 3), Point(4, -3));
std::cout << d << endl;
std::cout << 5 * d << endl;
(4, 3) (4, -3)
7
0
5
-24
7
(0, -6)
(0, -30)

Остальные задачи нужно решать с помощью классов Point и Vector. В классы можно добавлять новые поля и методы. Сдавать полный код решения задачи.

A: Расстояние между двумя точками

Даны координаты двух точек. Найдите расстояние между ними.

Ввод Вывод
0 0
1 1
1.4142135623730951

B: Полярный угол точки

Даны два числа – координаты точки, не совпадающей с началом координат. Выведите ее полярный угол (величину от 0 до 2 ? ).

Ввод Вывод
2 3
0.982793723247329

C: Угол между векторами

Даны четыре числа: координаты двух невырожденных векторов.

Выведите величину неориентированного угла между ними.

Ввод Вывод
2 1
3 5
0.5667292175235064
3 3
-3 -3
3.141592653589793

D: Площадь треугольника

Даны координаты трёх точек, которые могут лежать на одной прямой и даже совпадать.

Выведите значение площади треугольника с вершинами в данных точках.

Ввод Вывод
1 0
2 4
5 2
7.0
0 0
0 0
0 0
0.0

E: Классификация векторов

Даны четыре числа: координаты двух ненулевых векторов. Если эти вектора коллинеарны, выведите 1. Если эти вектора перпендикулярны, выведите 2. Иначе выведите 0.

В этой задаче нельзя использовать обратные тригонометрические функции.

Ввод Вывод
1 1
2 2
1
0 1
1 0
2
1 2
2 1
0

F: Три точки

Программа получает на вход шесть чисел: координаты трех точек.

Программа должна вывести YES, если эти точки лежат на одной прямой, или NO в противном случае.

Ввод Вывод
0 0
1 1
2 2
YES

G: Принадлежность точки лучу

Программа получает на вход шесть чисел: координаты точки и координаты начала и конца вектора. Проверьте, принадлежит ли данная точка лучу, задаваемому данным вектором.

Программа должна вывести YES, если точка принадлежит лучу, или NO в противном случае.

Ввод Вывод
1 6
3 7
5 8
NO

H: Принадлежность точки отрезку

Программа получает на вход шесть чисел: координаты точки и координаты концов отрезка. Проверьте, принадлежит ли данная точка данному отрезку.

Программа должна вывести YES, если точка принадлежит отрезку, или NO в противном случае.

Ввод Вывод
3 3
1 2
5 4
YES

I: Расстояние от точки до луча

Дано шесть чисел: координаты точки, координаты начала и конца вектора.

Программа должна вывести единственное число: расстояние от точки до луча, заданного вектором.

Ввод Вывод
2 1
1 1
0 2
1.0

J: Расстояние от точки до отрезка

Дано шесть чисел: координаты точки и координаты двух концов отрезка.

Программа должна вывести единственное число: расстояние от данной точки до данного отрезка.

Ввод Вывод
0 4
2 3
2 5
2.0

K: Принадлежит ли точка углу

Дан угол AOB (O - вершина угла, A и B - точки на сторонах) и точка P. Определите, принадлежит ли точка P углу AOB (включая его стороны: лучи OA и OB).

Программа получает на вход координаты точек A, O, B, P. Все координаты - целые, не превосходят 100 по модулю. Точки A, O, B не лежат на одной прямой.

Программа должна вывести слово YES или NO.

Ввод Вывод
0 1
0 0
1 0
1 1
YES
1 0
0 0
0 1
-1 -1
NO

L: Пересекаются ли два луча

Даны два луча: AB и CD (A и C - вершины лучей, B и D лежат на лучах). Проверьте, пересекаются ли они.

Программа получает на вход координаты точек A, B, C, D. Все координаты - целые, не превосходят 100 по модулю.

Программа должна вывести слово YES или NO.

Ввод Вывод
0 1
1 2
1 -1
1 0
YES
0 0
1 0
0 1
1 2
NO

M: Пересекаются ли два отрезка

Даны два отрезка AB и CD. Проверьте, пересекаются ли они.

Программа получает на вход координаты точек A, B, C, D. Все координаты - целые, не превосходят 100 по модулю.

Программа должна вывести слово YES или NO.

Ввод Вывод
5 1
2 6
1 1
7 8
YES

N: В каком ухе жужжит?

Фрекен Бок находится в точке A (xa, ya) и, глядя прямо на Малыша, стоящего в точке B (xb, yb) задает вопрос: «В каком ухе у меня жужжит?». Естественно, у грозной домоправительницы жужжит в ухе, потому что в точке C (xc, yc) завис Карлсон со включенным мотором. Определите, какой ответ Малыша будет правильным.

Входные данные

С клавиатуры вводятся координаты точек A, B и С. Исходные данные являются целыми числами, по модулю не превышающими 1000.

Выходные данные

Выведите слово LEFT (заглавными буквами), если у домоправительницы жужжит в левом ухе, RIGHT – если в правом, BOTH – если  жужжание и в левом и в правом одинаково.

Примеры
Входные данные
0 0 1 0 0 1

Выходные данные
LEFT

O: Угол между векторами

Входные данные

Четыре числа - координаты двух векторов. Все числа целые, по модулю не превышающие 1000.

Выходные данные

Одно число - величина неориентированного угла между ними с точностью до пятого знака после запятой.

Примеры
Входные данные
2 1 1 2

Выходные данные
0.64350

Q: Штрафы

Новый градоначальник города Глупова решил с целью пополнения бюджета и экономии горючего провести кампанию борьбы с левым уклоном и левыми рейсами. Для этого он запретил водителям выполнять левые повороты, установив штраф за каждый поворот налево в размере одного миллиона (разворот поворотом налево не считается).

От тяжелого прошлого Глупову достались улицы, которые могут пересекаться под любыми углами. Градоначальник приказал установить компьютерную систему тотальной слежки, которая следит за каждым автомобилем, записывая его координаты каждый раз, когда тот меняет направление движения (включая начальную и конечную точки пути).

Требуется написать программу, вычисляющую по записанной последовательности координат автомобиля штраф, который должен быть взыскан с водителя.

Входные данные

В первой строке вводится целое число N - количество записанных пар координат (1 <= N <= 1000). В каждой из следующих N строк записана очередная из этих пар (вещественные числа).

Выходные данные

Выведите суммарный штраф водителя в миллионах.

Примеры
Входные данные
4
0 0
1 0
1 1
2 1

Выходные данные
1

R: Графические штрафы

(посылается в систему, показывается с экрана)


Сделайте демонстрацию для задачи "Штрафы".

Пользователь нажимает на экран, в путь добавляются точки.
Программа рисует отрезки пути разными цветами. 

Например, поворот налево красным, а направо - синим.