Try   HackMD

Computing Geometry Olymp 2024

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


Лекция 1. Базовая геометрия

Вопросы до или после лекций

Раскрой ...
  1. Как доказать, что скалярное произведение векторов вычисляется по очень простой формуле:

uv=(x1,y1)(x2,y2)=x1x2+y1y2?

  1. Что такое векторное произведение векторов?
  2. Как задавать прямые в пространстве любой размерности
  3. Как древнегреческие математики измеряли и обозначали углы?
  4. В каких единицах измеряются углы в программах?
  5. По какой формуле можно вычислить угол
    ϕ
    в радианах, если даны координаты точки
    (x,y)
    ?
  6. Как найти
    cos(2ϕ)
    , если вам известно
    cos(ϕ)
    ?
  7. Как найти точное значение
    cos(2ϕ)
    ,
    cos(3ϕ)
    ,,
    cos(nϕ)
    если вам известно точное значение
    cos(ϕ)
    ?


Задачи


Точка на отрезке

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

https://www.eolymp.com/ru/problems/938

Точка на отрезке (desmos)
Точка на отрезке (geogebra)

"Уравнение отрезка":

Посмотрим...

Пусть на плоскости нам даны две точки

p1(x1,y1) и
p2(x2,y2)
, задающие концы отрезка, и произвольная точка
p(x,y)
. Тогда для того, чтобы точка
p
лежала на отрезке
p1p2
, должно выполняться условие:
r1+r2=r
,
или, после переноса
r
влево:
r1+r2r=0
,
где
r1
расстояние от точки
p1
до точки
p
,
r2
расстояние от точки
p
до точки
p2
,
r
расстояние от точки
p1
до точки
p2
.

Применяя теорему Пифагора или, что тоже самое, формулу вычисления длин векторов, получим на первый взгляд правильное выражение для точки

p, лежащей на отрезке
p1p2
:
(xx1)2+(yy1)2+(xx2)2+(yy2)2=(x2x1)2+(y2y1)2

В таком виде его нельзя применять в программах! (Почему?)
Вместо этого выражения нужно записать следующее:

|r1+r2r|<ϵ

Где

ϵ выбирается очень малым (в зависимости от задачи!). Например, можно в качестве пробного значения взять
ϵ=108
.


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

https://basecamp.eolymp.com/ru/problems/2129


Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Базовые вопросы и обсуждение

По какой формуле можно вычислить угол

ϕ в радианах, если даны координаты
(x,y)
точки
M
?


Переход от полярной системы координат к декартовой:

x=ρcosϕ
y=ρsinϕ

ϕ=(ϕ)π/180


Вариант 1. Скалярное произведение векторов

Воспользуемся скалярным произведением векторов

uv :

uv=uvcosϕ

Здесь

u и
v
— размеры векторов, а
ϕ
— угол между ними.


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


Тогда

cosϕ=uvuv


Пусть вектор

u=(3;4). Тогда
u=5
.

Пусть

v=(1;0). Тогда
v=1.

uv=(3;4)(1;0)=31+40=3 :

Тогда

cosϕ=3/5.


Чему равняется

ϕ ?

ϕ=arccos(3/5)=0.927295218...rad=53.130102354195...


У этого варианта есть серьезные недостатки - невозможность отличить положительные углы и отрицательные углы относительно оси x.

Похожие проблемы есть у всех обратных тригонометрических функций.


2 Вариант! Специальная функция для определения угла

Специальная функция, которая умеет точно отвечать на вопрос об угле точки

(x;y), называетcя
ϕ=atan2(y,x)

Эта функция возвращает угол в диапазоне

(π;π]

Уравнение прямой I

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

https://www.eolymp.com/ru/problems/2141

Уравнение прямой II

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

https://www.eolymp.com/ru/problems/2142


Общее уравнение прямой на плоскости

Ax+By+D=0

Обсуждение

Геометрический смысл коэффициентов уравнения

N=(A,B) — нормаль к прямой, управляет ее ориентацией и указывает на положительную полуплоскость.
D
— ненормированной расстояние от прямой до начала координат.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


Условия

В данной задаче даны координаты двух точек :

(x1,y1) и
(x2,y2)

Нам надо получить общее уравнение прямой, проходящей через эти две точки.


Решение

Воспользуемся отношениями подобия (или пропорциональности) изменений по

x и
y
:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Возьмем первое из них и запишем в строчку :

(xx1)(y2y1)=(yy1)(x2x1)


Чуть раскроем скобки и немного упростим :

x(y2y1)x1y2+x1y1=y(x2x1)y1x2+y1x1

x(y2y1)x1y2=y(x2x1)y1x2


Перенесем все в левую часть и запишем относительно

x и
y
:

(y2y1)x+(x1x2)y(x1y2y1x2)=0

Вспоминаем, что мы хотим получить уравнение

Ax+By+D=0


​​​​А это значит, что

{A=(y2y1)B=(x1x2)D=(x1y2y1x2)


Проверяем.

При

x1=1,y1=2,x2=3,y2=1 мы получаем
{A=(12)=1B=(13)=2D=(1123)=5


То есть, мы по двум заданным точкам

S(1;2) и
T(3;1)
получили уравнение прямой
$$

⁍,
$$
проходящей через эти точки.


Действительно, при подстановке точки

S(x1;y1)=S(1;2) в это уравнение мы получаем:

$$

-x_1-2y_1+5=0, \
-1-2\cdot 2+5=0, \
-5+5=0,
$$
верное равенство!


Аналогичный результат и при подстановке второй точки

T(3;1).


Уравнение полуплоскости

Если мы заменим равенство на неравенство (cо знаком больше), мы получим следующее отношение:


Это отношение описывает полуплоскость с правой стороны при движении по прямой в направлении от первой точки S ко второй T:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


Если же мы хотим, чтобы закрашенная полуплоскость появлялась с левой стороны по ходу движения вдоль линии — надо просто поменять знаки в (1).


Расстояния до прямой

Если мы подставим в общее выражение прямой

Ax+By+D
координаты произвольной точки
P(x,y)
,
мы получим “расстояние” (ненормированное) от этой точки до прямой!


Причем, знак этого “расстояния” зависит от того, где точка

P находится

  • на полуплоскости(+)
  • или вне ее (-) .

LineSigns


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

N=|N|=A2+B2.

a=A/N,b=B/N,d=D/N

Тогда

n=(a,b) - это тоже нормаль, как и
N
, только нормированная и
|n|=1!


При этом

d — это уже нормальное расстояние от прямой до начала координат (со знаком, зависящим от того, попадает ли начало координат в закрашенную область или находится с другой стороны).


Простые cистемы линейных уравнений. Формула Крамера

https://www.eolymp.com/uk/problems/936

Обсуждение

Детерминант

Determinant


Важное выражение (детерминант).

Встречается во многих задачах компьютерной геометрии и при решении систем уравнений:


                    | x1  x2 |
det(x1,y1, x2,y2) = |        | = x1*y2 - x2*y1
                    | y1  y2 |

“Векторное” произведение.

Зная формулу для площади параллелограмма, мы можем ввести и использовать операцию “векторного” произведения векторов на плоскости:


u×v=uvsinϕ=...


u×v=det(u,v)=...


u×v=det(x1,y1,x2,y2)=x1y2x2y1

Параметрические уравнения

Параметрическое уравнение отрезка.
 Пусть

A(x1,y1),B(x2,y2) – концы отрезка
AB
.

Параметрическое уравнение отрезка имеет вид:

S(t)=A+vt,

v=BA=(x2x1,y2y1)

t[0,1]
При
t=0
мы получаем точку
A
, а при
t=1
— точку
B
.

Параметрическое уравнение луча.

R(t)=A+vt,
t[0,)

Параметрическое уравнение линии.

L(t)=A+vt,
t(,)

Параметрическое уравнение плоскости

Π(s,t)=A+us+vt

Нормаль к плоскости или вектор, перпендикулярный двум другим векторам.

Если мы хотим построить нормаль

n к плоскости мы можем записать

n=u×v

Расстояние между отрезками 3d

https://www.eolymp.com/ru/problems/1830

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

def distance_from_two_lines(e1, e2, r1, r2): # e1, e2 = Direction vector # r1, r2 = Point where the line passes through # Find the unit vector perpendicular to both lines # vector product: e1 x e2 n = np.cross(e1, e2) # |n| = 1 n /= np.linalg.norm(n) # Calculate distance # scalar product: n * (r1-r2) d = np.dot(n, r1 - r2) return d

Треугольник и точка

https://basecamp.eolymp.com/ru/problems/666

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


Пересечение отрезков

https://basecamp.eolymp.com/ru/problems/714

https://basecamp.eolymp.com/ru/problems/839
https://basecamp.eolymp.com/ru/problems/1505

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


Формулы Крамера

https://www.eolymp.com/ru/contests/21305/problems/232342

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


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

https://www.eolymp.com/ru/problems/2138

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Точка внутри круга

https://www.eolymp.com/ru/problems/3171

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

https://www.desmos.com/calculator/cybidko0g2

Две окружности

https://www.eolymp.com/ru/problems/4

Площадь многоугольника

https://www.eolymp.com/ru/problems/851

Площадь многоугольника

Площадь и объем пирамиды

https://www.eolymp.com/ru/problems/948

Площадь и объем пирамиды


Сближение кораблей

https://www.eolymp.com/ru/problems/1421

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Сложный (оптимизационный) подход к решению

Скорость каждого корабля преобразуем в декартову систему координат:

v=(vcosϕ,vsinϕ)

Используя параметрическое представление луча мы записываем два уравнения движения для кораблей:

U(t)=A+v1tV(t)=B+v2t


Каждое из этих уравнений можно рассматривать как два уравнения:

V(t)={Vx(t)=Bx+v2xtVy(t)=By+v2yt


Какое расстояние между кораблями?

Вектор

Δ от корабля
V
к кораблю
U
:
Δ=UVΔ=(Ax+v1xtBxv2xt,Ay+v1ytByv2yt).

Длина вектора
|Δ|
— расстояние между кораблями.


Рассмотрим квадрат расстояния между кораблями:

w(t)=(UV)2=Δ2=ΔΔ

Если расстояние между кораблями становится минимальным, то и квадрат расстояния становится минимальным.


Как найти минимум функции

Если скорость роста функции становится равной 0, то мы находимся

  • либо минимуме,
  • либо в максимуме,
  • либо на “полочке” функции,

Extremums
то есть, в какой-то экстремальной точке.

В нашей задаче мы должны получить минимум.


Как найти производную.

Нам сейчас достаточно запомнить простейшие случаи.


  1. Производная константы
    f(t)=c
    равна 0 (потому что константа никуда не растет).

  1. Производная линейной функции
    f(t)=t
    :
    df(t)dt=dtdt=1

  1. Производная квадратичной функции
    f(t)=t2
    :
    df(t)dt=dt2dt=2t

Распишем квадрат вектора

Δ=UV , используя определение скалярного произведения:
w(t)=ΔΔ=(Ax+v1xtBxv2xt)2+(Ay+v1ytByv2yt)2w(t)=(AxBx+(v1xv2x)t)2+(AyBy+(v1yv2y)t)2


Найдем скорость изменения этой величины:

dwdt=2(v1xv2x)(AxBx+(v1xv2x)t)+2(v1yv2y)(AyBy+(v1yv2y)t)


Для того, чтобы мы нашли минимум, мы должны решить уравнение:

dwdt=0.


Мы получаем такое линейное уравнение относительно переменной

t:

(v1xv2x)(AxBx+(v1xv2x)t)+(v1yv2y)(AyBy+(v1yv2y)t)=0(v1xv2x)(AxBx)+(v1xv2x)2t+(v1yv2y)(AyBy)+(v1yv2y)2t=0(v1xv2x)(AxBx)+(v1yv2y)(AyBy)+((v1xv2x)2+(v1yv2y)2)t=0


Обозначим

d=(v1xv2x)(AxBx)+(v1yv2y)(AyBy)

k=(v1xv2x)2+(v1yv2y)2

Тогда

d+kt=0.


  1. Решим его и получим момент времени
    t
    , когда корабли находятся на кратчайшем расстоянии.
  2. Подставим это время в формулы (2), мы получим положения кораблей в момент наибольшего сближения.
  3. Отсюда и находим минимальное расстояние между кораблями.

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

|AB| между кораблями в момент времени
t=0
.

Если

k=0, то корабли идут параллельными курсами и расстояние между ними всегда одно и то же.


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


Простой подход к решению

Человек-паук

https://www.eolymp.com/ru/problems/1682

Подход к решению

Пусть человек-паук находится в точке

(xi,yi) и хочет прыгнуть на расстояние
r
. Для нашей задачи достаточно считать, что
r=1
.

Все возможные точки его прыжка описываются уравнением окружности:

(xxi)2+(yyi)2=r2

Если человек-паук хочет прыгнуть на горизонтальную линию, то надо рассмотреть уравнение этой линии

y=0 и подставить это уравнение в уравнение окружности:
(xxi)2+yi2=r2

Тогда координата x следующей точки человека паука:

x=xi+r2yi2

Когда прыгать в эту точку опасно?
Когда:

r2yi2<0

Уравнение наклонной линии, идущей из начала координат под углом

α:

,

где

k=tanα

Как будет выглядеть пересечение этой линии с окружностью? Подставляем вместо

y выражение
kx
и получаем:
(xxi)2+(kxyi)2=r2

Раскроем скобки:

x22xxi+xi2+k2x22kxyi+yi2=r2

Приведем подобные и получим квадратное уравнение:

(1+k2)x22(xi+kyi)x+xi2+yi2r2=0

Пусть

a=1+k2
b=2(xi+kyi)

c=xi2+yi2r2

D=b24ac

Наше квадратное уравнение примет вид:

Тогда новая координата

x прыжка будет:

Когда прыгать в эту точку опасно? Когда:

D<0 .

Кроме того, надо учитывать то, что во время каждого следующего прыжка человек-паук должен быть еще дальше от начала координат….

Задачи 2 лекции

Конусное расстояние

https://www.eolymp.com/ru/problems/1501

Разворачиваем..

Вычисляем..

Выпуклый многоугольник

https://www.eolymp.com/ru/problems/2148

Закрашенные точки

Закрашенные точки

Выпуклая оболочка

https://www.eolymp.com/ru/problems/2294

Most distant points pair

https://www.eolymp.com/ru/problems/3167

Ближайшие точки

https://www.eolymp.com/ru/problems/555

Точка пересечения медиан

https://www.eolymp.com/ru/problems/5185

Центр вписанной окружности

https://www.eolymp.com/ru/problems/5186

Точка пересечения высот

https://www.eolymp.com/ru/problems/5187

Построить треугольник по двум сторонам и углу

https://www.eolymp.com/ru/problems/5190

Построить треугольник 2

https://www.eolymp.com/ru/problems/5191

Ссылки для самостоятельного ознакомления

Dot product - Wikipedia

Векторное произведение - Википедия

Find shortest distance between lines in 3D

GeoGebra Tutorial - Points and Vectors

Geometry Tool

Базовые соотношения и алгоритмы геометрии (RU)

5 Mathematics

5.1 Arithmetics and Geometry

Included Topics (✓)

  • Integers:
    ✓ Operations (addition, subtraction, multiplication, division, exponentiation)
    ✓ Comparison (ordering, inequalities)
    ✓ Basic properties (sign, parity, divisibility)
  • Basic modular arithmetic:
    ✓ Addition, subtraction, multiplication
  • Prime numbers
  • Fractions and percentages
  • Geometric shapes:
    ✓ Line, line segment, angle
    ✓ Triangle, rectangle, square, circle
  • Coordinate geometry:
    ✓ Points and vectors in the plane
    ✓ Coordinates and Euclidean distances
  • Polygons:
    ✓ Vertex, side/edge
    ✓ Simple vs. convex polygons
    ✓ Concepts of "inside" and area
  • Pythagorean theorem

Excluded Topics (✗)

  • Geometry in three or more dimensions
  • Advanced modular arithmetic:
    ✗ Modular division and inverse elements
  • Complex numbers
  • Trigonometric functions
  • General conics:
    ✗ Parabolas, hyperbolas, ellipses
  • Floating-point computations:
    ✗ Precision analysis and optimization

AL10. Geometric Algorithms

In general, the ISC has a strong preference towards problems that can be solved using integer arithmetic to avoid precision issues. This may include representing some computed values as exact fractions, but extensive use of such fractions in calculations is discouraged. Additionally, if a problem uses two-dimensional objects, the ISC prefers problems in which such objects are rectilinear.

Covered Topics (✓)

  • ✓ Representing points, vectors, lines, line segments
  • ✓ Checking for collinear points, parallel/orthogonal vectors and clockwise turns (for example, by using dot products and cross products)
  • ✓ Intersection of two lines
  • ✓ Computing the area of a polygon from the coordinates of its vertices
  • ✓ Checking whether a (general/convex) polygon contains a point
  • ✓ Coordinate compression
  • ✓ O(n log n) time algorithms for convex hull
  • ✓ Sweeping line method

Excluded Topics (✗)

  • ✗ Point-line duality
  • ✗ Halfspace intersection, Voronoi diagrams, Delaunay triangulations
  • ✗ Computing coordinates of circle intersections against lines and circles
  • ✗ Linear programming in 3 or more dimensions and its geometric interpretations
  • ✗ Center of mass of a 2D object
  • ✗ Computing and representing the composition of geometric transformations if the knowledge of linear algebra gives an advantage