Основные понятия:
1) Например, если прямая задана двумя точками $\vec{DE} = \vec{a}$, тогда радиус вектор нормали к этой прямой будет вектором, перепендикулярным $\vec{DE}$, то есть $(a.y, -a.x)$ или $(-a.y, a.x)$
2) Если прямая задана уравнением $Ax + By + C = 0$, то радиус вектор нормали к этой прямой будет вектором c координатами $(A, B)$ или $(-A, -B)$
Скалярное произведение векторов:
Определяется формулой:
$<\vec{a}, \vec{b}> = a_x*b_x + a_y*b_y = |a| |b| * \cos{a, b}$
|a| - длина вектора, которую можно вычислить следующим образом(по теореме Пифагора)
$|a|^2 = <\vec{a}, \vec{a}>$
Скалярное произведение используется, когда нужно вычислить косинус угла между векторами, либо спроецировать точки в плоскости на прямую.
Скалярное произведение равно нулю, когда векторы коллинеарны. Скалярное произведение больше нуля, когда угол между векторами острый. Скалярное произведение меньше нуля, когда угол между векторами тупой.
Псевдовекторное произведение векторов:
Определяется формулой:
$[\vec{a}, \vec{b}] = a_x*b_y - a_y*b_x = |a| |b| * \sin{a, b}$
Обычно с помощью псевдовекторного произведения определяют с какой стороны от вектора лежит точка.
$[\vec{a}, \vec{b}] = \pm$ площадь параллелограмма с образующими $\vec{a}, \vec{b}$ $=$ $\pm 2 *$ площадь треугольника с образующими $\vec{a}, \vec{b}$
Для программирования геометрии необходим шаблон, который нужно всегда одинаково писать. Это уменьшает шанс ошибиться и повышает скорость написания программы на олимпиадах.
Например можно для каждого геометрического объекта создавать свой класс, переопределять необходимые операции и дополнять необходимыми методами.
class point(object):
def __init__(self, x0=0, y0=0):
self.x = x0
self.y = y0
def __add__(self, other):
return point(self.x + other.x, self.y + other.y)
#псевдовекторное произведение
def cross_product(self, A):
return self.x * A.y - self.y * A.x
Метод _init_ перегружает конструктор класса. Конструктор - создание экземпляра класса. Также можно перегружать арифметические операции и операции сравнения.
A = point(3, 8)
B = point(1, 3)
C = A + B
p = A.cross_product(B)
print('A = ', A.x, A.y)
print('B = ', B.x, B.y)
print('C = ', C.x, C.y)
print('[A * B] = ', p)
продолжение следует