Геометрия: скалярные и векторные произведения

Для удобства необходимо создать классы для хранения базовых примитивов (точка, вектор, отрезок, прямая) и определить необходимые для них операторы.

Упражнения

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

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

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

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

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

Ввод Вывод
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