Как найти координаты точки пересечения двух прямых

Точка пересечения двух прямых на плоскости

Пересечение прямых

Для создания компьютерных игр, программ математических графиков, расчетов движения объектов и т.п. очень часто требуется найти точку пресечения прямых. Сначала необходимо на бумаге вывести и упростить формулы вычисления и далее эти формулы перевести в программный код.

Прямые это бесконечные линии, поэтому на плоскости они всегда пересекаются. Если прямые не пересекаются значит они параллельны. Частные случаи поведения прямых на плоскости: прямые неопределенны, прямые параллельны, прямые совпадают, одна из прямых параллельна оси X или Y. Общие случаи «нормального» пересечения прямых и частные случаи учитываются в программном коде класса Intersections прикрепленного исходника.

Прямые пересекаются

Даны две прямые AB и CD расположенные на одной плоскости. Они пересекаются и необходимо найти точку пересечения. За основу берем классическое уравнение прямой и подставляя данные получаем систему уравнений для двух прямых.

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

Классическое уравнение прямой: Запишем уравнение в одну строчку: Вычислим коэффициенты и свободные члены: В итоге получаем уравнение прямой с коэффициентами:

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

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

Координаты точки пересечения это числа которые являются решением для каждого из уравнений прямых. Решая систему из двух уравнений находим в какой точке пересекаются прямые AB и CD.

Подставляем известные данные: Получаем два уравнения: Решаем систему уравнений: Найдено, прямые пересекаются в точке с координатами:

Прямые параллельны

Если прямые параллельны и лежат друг от друга на расстоянии, то у них нет общих точек. Совместная система уравнений не имеет решений. Эти уравнения существуют как бы сами по себе. В точности как их параллельные прямые.

Две прямые могут полностью совпадать, в таком случае у них бесконечное количество общих точек. Совпадение прямых означает равность коэффициентов и свободных членов уравнений. Совпадающие прямые имеют идентичные уравнения.

Применяя формулу у.2 выведем уравнения прямых: Получаем систему уравнений:

Итог: система уравнений параллельных прямых не имеет решений.

Уравнение в программный код

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

Точки определяющие прямые запишем в структуры Point. У каждой прямой две точки и они являются входными данными:
Определяем коэффициенты и свободные члены уравнений. Записываем их в соответствующие переменные:
Точка пересечения также будет храниться в структуре Point:

Вывод результата

В выражениях присутствует деление. Но знаменатель только тогда и только тогда будет равен нулю, когда обе прямые будут параллельны или оси X или оси Y. В этом случае они не пересекаются или совпадают. Это отслеживаемые состояния в классе Intersections , и вывод информации заканчивается до выбрасывания исключения при делении на ноль.

Проверка параллельности и совпадения

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

Класс Intersections

Исходник представляет собой два класса: класс вычисления точки пересечения прямых и информационный класс выдающий множество дополнительных сведений о свойствах исследуемых прямых.

Краткий листинг исходника дающий представление о структуре классов:

Применение класса Intersections

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

Прикрепленный файл

Прикрепленный файл архива содержит исходник классов Intersections, Info и программу демонстрирующую работу класса Intersections в режиме вычисления точки пересечения прямых на плоскости. Исходный код написан на языке C#, но его легко можно преобразовать в код на другом языке программирования. Для работы демонстрационной программы необходима установка платформы. .NET Core 3.1.

Скачать исходник

  • Файл: IntersectionsLineLine.zip
  • Размер: 84 Кбайт
  • Загрузки: 376

Похожая тематика

Пересечение луча и прямой на плоскости »

Урок 30. Определение координат точки пересечения двух линий

Урок из серии «Геометрические алгоритмы»

Здравствуйте, дорогой читатель!

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

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

Точки на плоскости описываются парой вещественных чисел. При использовании вещественного типа операции сравнения лучше оформить специальными функциями.

Причина известна: на типе Real в системе программирования Паскаль нет отношения порядка, поэтому записи вида a = b, где a и b вещественные числа, лучше не использовать.
Сегодня мы введем в употребление функцию RealEq() для реализации операции «=» (строго равно) :

Решение. Очевидное решение состоит в том, чтобы решить систему уравнений прямых: Давайте перепишем эту системе несколько иначе:
(1)

Введем обозначения: , , . Здесь D – определитель системы, а — определители, получающиеся в результате замены столбца коэффициентов при соответствующем неизвестном столбцом свободных членов. Если , то система (1) является определенной, то есть имеет единственное решение. Это решение можно найти по следующим формулам: , , которые называются формулами Крамера. Напомню, как вычисляется определитель второго порядка. В определителе различают две диагонали: главную и побочную. Главная диагональ состоит из элементов, взятых по направлению от верхнего левого угла определителя в нижний правый угол. Побочная диагональ – из правого верхнего в нижний левый. Определитель второго порядка равен произведению элементов главной диагонали минус произведение элементов побочной диагонали.

.

В программном коде для проверки проверка равенства используется функция RealEq(). Вычисления над вещественными числами производятся с точностью до _Eps=1e-7.

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

Например, для линий, заданных уравнениями: x+2y+3 = 0 и 5x+6y+7=0 в результате получается точка с координатами: x= 1.0, y=-2.0.

На следующем уроке составим программу для определения принадлежности точки отрезку.

График линейной функции, его свойства и формулы

О чем эта статья:

Понятие функции

Функция — это зависимость «y» от «x», где «x» является переменной или аргументом функции, а «y» — зависимой переменной или значением функции.

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

  • Табличный способ — помогает быстро определить конкретные значения без дополнительных измерений или вычислений.
  • Графический способ — наглядно.
  • Аналитический способ — через формулы. Компактно, и можно посчитать функцию при произвольном значении аргумента из области определения.
  • Словесный способ.
Читайте также  Как сделать прописные буквы в photoshop

График функции — это объединение всех точек, когда вместо «x» можно подставить произвольные значения и найти координаты этих точек.

Понятие линейной функции

Линейная функция — это функция вида y = kx + b, где х — независимая переменная, k, b — некоторые числа. При этом k — угловой коэффициент, b — свободный коэффициент.

Геометрический смысл коэффициента b — длина отрезка, который отсекает прямая по оси OY, считая от начала координат.

Геометрический смысл коэффициента k — угол наклона прямой к положительному направлению оси OX, считается против часовой стрелки.

Если известно конкретное значение х, можно вычислить соответствующее значение у.

Нам дана функция: у = 0,5х — 2. Значит:

  • если х = 0, то у = -2;
  • если х = 2, то у = -1;
  • если х = 4, то у = 0;
  • и т. д.

Для удобства результаты можно оформлять в виде таблицы:

х 2 4
y -2 -1

Графиком линейной функции является прямая линия. Для его построения достаточно двух точек, координаты которых удовлетворяют уравнению функции.

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

Буквенные множители «k» и «b» — это числовые коэффициенты функции. На их месте могут стоять любые числа: положительные, отрицательные или дроби.

Давайте потренируемся и определим для каждой функций, чему равны числовые коэффициенты «k» и «b».

Функция Коэффициент «k» Коэффициент «b»
y = 2x + 8 k = 2 b = 8
y = −x + 3 k = −1 b = 3
y = 1/8x − 1 k = 1/8 b = −1
y = 0,2x k = 0,2 b = 0

Может показаться, что в функции «y = 0,2x» нет числового коэффициента «b», но это не так. В данном случае он равен нулю. Чтобы не поддаваться сомнениям, нужно запомнить: в каждой функции типа «y = kx + b» есть коэффициенты «k» и «b».

Свойства линейной функции

  1. Область определения функции — множество всех действительных чисел.
  2. Множеством значений функции является множество всех действительных чисел.
  3. График линейной функции — прямая. Для построения прямой достаточно знать две точки. Положение прямой на координатной плоскости зависит от значений коэффициентов k и b.
  4. Функция не имеет ни наибольшего, ни наименьшего значений.
  5. Четность и нечетность линейной функции зависят от значений коэффициентов k и b:
    b ≠ 0, k = 0, значит y = b — четная;
    b = 0, k ≠ 0, значит y = kx — нечетная;
    b ≠ 0, k ≠ 0, значит y = kx + b — функция общего вида;
    b = 0, k = 0, значит y = 0 — как четная, так и нечетная функция.
  6. Свойством периодичности линейная функция не обладает, потому что ее спектр непрерывен.
  7. График функции пересекает оси координат:
    ось абсцисс ОХ — в точке (-b/k, 0);
    ось ординат OY — в точке (0; b).
  8. x=-b/k — является нулем функции.
  9. Если b = 0 и k = 0, то функция y = 0 обращается в ноль при любом значении переменной х.
    Если b ≠ 0 и k = 0, то функция y = b не обращается в нуль ни при каких значениях переменной х.
  10. Функция монотонно возрастает на области определения при k > 0 и монотонно убывает при k 0: функция принимает отрицательные значения на промежутке (-∞, — b /k) и положительные значения на промежутке (- b /k, +∞)
    При k b /k, +∞) и положительные значения на промежутке (-∞, — b /k).
  11. Коэффициент k характеризует угол, который образует прямая с положительным направлением Ох. Поэтому k называют угловым коэффициентом.
    Если k > 0, то этот угол острый, если k

Построение линейной функции

В геометрии есть аксиома: через любые две точки можно провести прямую и притом только одну. Исходя из этой аксиомы следует: чтобы построить график функции вида «у = kx + b», достаточно найти всего две точки. А для этого нужно определить два значения х, подставить их в уравнение функции и вычислить соответствующие значения y.

Например, чтобы построить график функции y = 1 /3x + 2, можно взять х = 0 и х = 3, тогда ординаты этих точек будут равны у = 2 и у = 3. Получим точки А (0; 2) и В (3; 3). Соединим их и получим такой график:

В уравнении функции y = kx + b коэффициент k отвечает за наклон графика функции:

  • если k > 0, то график наклонен вправо;
  • если k 0, то график функции y = kx + b получается из y = kx со сдвигом на b единиц вверх вдоль оси OY;
  • если b 1 /2x + 3, y = x + 3.

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

В каждой функции b = 3, поэтому все графики пересекают ось OY в точке (0; 3).

Теперь рассмотрим графики функций y = -2x + 3, y = — 1 /2x + 3, y = -x + 3.

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

Коэффициент b равен трем, и графики также пересекают ось OY в точке (0; 3).

Рассмотрим графики функций y = 2x + 3, y = 2x, y = 2x — 2.

Теперь во всех уравнениях функций коэффициенты k равны. Получили три параллельные прямые.

При этом коэффициенты b различны, и эти графики пересекают ось OY в различных точках:

  • график функции y = 2x + 3 (b = 3) пересекает ось OY в точке (0; 3);
  • график функции y = 2x (b = 0) пересекает ось OY в точке начала координат (0; 0);
  • график функции y = 2x — 2 (b = -2) пересекает ось OY в точке (0; -2).

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

Подытожим. Если мы знаем знаки коэффициентов k и b, то можем представить, как выглядит график функции y = kx + b.

Если k 0, то график функции y = kx + b выглядит так:

0″ src=»https://user84060.clients-cdnnow.ru/uploads/5fc1049363f94987951092.png» style=»height: 600px;»>

Если k > 0 и b > 0, то график функции y = kx + b выглядит так:

0 и b > 0″ src=»https://user84060.clients-cdnnow.ru/uploads/5fc104b2640e6151326286.png» style=»height: 600px;»>

Точки пересечения графика функции y = kx + b с осями координат:

  • С осью ОY. Абсцисса любой точки, которая принадлежит оси ОY равна нулю. Поэтому, чтобы найти точку пересечения с осью ОY, нужно в уравнение функции вместо х подставить ноль. Тогда получим y = b.
    Координаты точки пересечения с осью OY: (0; b).
  • С осью ОХ. Ордината любой точки, которая принадлежит оси ОХ равна нулю. Поэтому, чтобы найти точку пересечения с осью ОХ, нужно в уравнение функции вместо y подставить ноль. И получим 0 = kx + b. Значит x = — b /k.
    Координаты точки пересечения с осью OX: (- b /k; 0)

Решение задач на линейную функцию

Чтобы решать задачи и строить графики линейных функций, нужно рассуждать и использовать свойства и правила выше. Давайте потренируемся!

Пример 1. Построить график функции y = kx + b, если известно, что он проходит через точку А (-3; 2) и параллелен прямой y = -4x.

  • В уравнении функции y = kx + b два неизвестных параметра: k и b. Поэтому в тексте задачи нужно найти два условия, которые характеризуют график функции.
    Из того, что график функции y = kx + b параллелен прямой y = -4x, следует, что k = -4. То есть уравнение функции имеет вид y = -4x + b.
    Осталось найти b. Известно, что график функции y = -4x + b проходит через точку А (-3; 2). Подставим координаты точки в уравнение функции и мы получим верное равенство:
    2 = -4(-3) + b
    b = -10
  • Таким образом, нам надо построить график функции y = -4x — 10
    Мы уже знаем точку А (-3; 2), возьмем точку B (0; -10).
    Поставим эти точки в координатной плоскости и соединим прямой:

Пример 2. Написать уравнение прямой, которая проходит через точки A (1; 1); B (2; 4).

  1. Если прямая проходит через точки с заданными координатами, значит координаты точек удовлетворяют уравнению прямой y = kx + b.
    Следовательно, если координаты точек подставить в уравнение прямой, то получим верное равенство.
  2. Подставим координаты каждой точки в уравнение y = kx + b и получим систему линейных уравнений.
  3. Вычтем из второго уравнения системы первое, и получим k = 3.
    Подставим значение k в первое уравнение системы, и получим b = -2.

Как найти координаты точки пересечения двух прямых

добавлено: 11 Jun 2008 10:19
редактировано: 7 Jul 2009 17:57

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

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

Решение

Если две прямые не параллельны, то они пересекаются. Чтобы найти точку пересечения, достаточно составить из двух уравнений прямых систему и решить её:

Пользуясь формулой Крамера, сразу находим решение системы, которое и будет искомой точкой пересечения:


Если знаменатель нулевой, т.е.

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

Реализация

struct pt ; struct line ; constdouble EPS =1e-9; double det (double a, double b, double c, double d) bool intersect (line m, line n, pt & res)

Урок из серии «Геометрические алгоритмы»

Здравствуйте, дорогой читатель.

Совет 1: Как найти координаты точки пересечения двух прямых

Напишем еще три новые функции.

Функция LinesCross() будет определять, пересекаются ли два отрезка. В ней взаимное расположение отрезков определяется с помощью векторных произведений. Для вычисления векторных произведений напишем функцию – VektorMulti().

Функция RealLess() будет использоваться для реализации операции сравнения “
Взаимное расположение отрезков можно проверить с помощью векторных произведений:


Рассмотрим отрезок и точки и .

Точка лежит слева от прямой , для нее векторное произведение > 0, так как векторы положительно ориентированы.

Точка расположена справа от прямой, для нее векторное произведение _Eps end; function VektorMulti(ax,ay,bx,by:real): real; begin vektormulti:= ax*by-bx*ay; end;Function LinesCross(x1,y1,x2,y2,x3,y3,x4,y4:real): boolean; <Пересекаются ли отрезки?>begin v1:=vektormulti(x4-x3,y4-y3,x1-x3,y1-y3); v2:=vektormulti(x4-x3,y4-y3,x2-x3,y2-y3); v3:=vektormulti(x2-x1,y2-y1,x3-x1,y3-y1); v4:=vektormulti(x2-x1,y2-y1,x4-x1,y4-y1); if RealLess(v1*v2,0) and RealLess(v3*v4,0)

Поделиться с друзьями

Пусть даны два отрезка. Первый задан точками P1(x1;y1) и P2(x2;y2). Второй задан точками P3(x3;y3) и P4(x4;y4).

Взаимное расположение отрезков можно проверить с помощью векторных произведений:

Рассмотрим отрезок P3P4 и точки P1 и P2.

Точка P1 лежит слева от прямой P3P4, для нее векторное произведение v1 > 0, так как векторы положительно ориентированы.
Точка P2 расположена справа от прямой, для нее векторное произведение v2 Пересечение прямых

Соответственно вектор с началом в точке P1 и концом в точке P2 имеет координаты (x2-x1, y2-y1). Если P(x, y) – произвольная точка на прямой, то координаты вектора P1P равны (x — x1, y – y1).

Итак, прямую можно задать уравнением вида (1).

Как найти точку пересечения прямых?
Очевидное решение состоит в том, чтобы решить систему уравнений прямых:

Здесь D – определитель системы, а Dx,Dy — определители, получающиеся в результате замены столбца коэффициентов при соответствующем неизвестном столбцом свободных членов. Если D ≠ 0, то система (2) является определенной, то есть имеет единственное решение. Это решение можно найти по следующим формулам: x1=Dx/D, y1=Dy/D, которые называются формулами Крамера. Небольшое напоминание, как вычисляется определитель второго порядка. В определителе различают две диагонали: главную и побочную. Главная диагональ состоит из элементов, взятых по направлению от верхнего левого угла определителя в нижний правый угол. Побочная диагональ – из правого верхнего в нижний левый. Определитель второго порядка равен произведению элементов главной диагонали минус произведение элементов побочной диагонали.

GIS-LAB

Географические информационные системы и дистанционное зондирование

  • Статьи
    • ГИС
    • Обработка ДДЗ
    • Главная
    • Вопросы и ответы

    Нахождение точки пересечения двух линий по углам и двум известным точкам (биангуляция)

    Немного простейшей геометрии для решения задачи биангуляции. Применение в орнитологии.

    Задача

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

    Применение

    Для изучения поведения животных часто используют радиотелеметрический метод: исследуемый объект помечается радиопередатчиком, который испускает радиосигнал определенной частоты и далее исследователь при помощи приемника и принимающей антенны следит за перемещениями этого объекта. Одним из возможных способов определения точного местоположения объекта является метод биангуляции. Для этого исследователю требуется взять 2 азимута на исследуемый объект с точек с известными координатами. Местоположение объекта будет соответствовать точке пересечения этих двух азимутов. Координаты точек, с которых засекаются азимуты можно снять с помощью спутникового навигатора (GPS), либо азимуты снимаются с реперных точек, координаты которых известны заранее. Азимут в этом случае – направление на источник наиболее сильного сигнала, исходящего от меченного передатчиком объекта, измеряемое обычно в градусах.

    Перед расчетами необходимо точки полученные с помощью GPS перевести в спроецированную систему координат, например соответствующую зону UTM, это можно сделать с помощью DNRGarmin.

    Для того чтобы рассчитанное местоположение исследуемого объекта наиболее точно соответствовало реальному положению нужно учитывать следующее:

    1) необходимо стараться дождаться момента, чтобы ошибка определения координат в навигаторе была как можно меньше.

    2) чтобы угол между азимутами стремился к 90 градусам (по крайней мере, был больше 30 и меньше 150 градусов).

    Расстояние, с которого следует снимать азимут, зависит от дальности действия передатчика, при этом применяется эмпирическое правило, что погрешность в определении азимута увеличивается на 1 метр с удалением от исследуемого объекта на каждые 10 м. Т.о. при снятии азимута с расстоянием до объекта 100 м погрешность составит 10 м. Однако, это правило применимо на ровной открытой местности. Следует учитывать, что неровности рельефа и древесно-кустарниковая растительность экранируют и отражают сигнал. Следует избегать нахождения в непосредственной близости от исследуемого объекта, т.к. во-первых, слишком сильный сигнал затруднит определение точного азимута, а, во-вторых, в некоторых случаях будет невозможно рассчитать точку пересечения из-за того, что второй азимут будет проходить за точкой снятия первого азимута. Временной интервал между снятием пары азимутов должен быть минимизирован, но, конечно, зависит от подвижности исследуемого животного.

    Решение

    Задача решается с помощью простейшей геометрии и решения системы уравнений.
    Для начала из точки и азимута получаем уравнение прямой, для этого:

    Из уравнения общего вида:

    ax + by + c = 0

    при условии, что b<>0 получаем

    y = kx + d, где k=-(a/b), d=-(c/b)

    таким образом, получаем

    Далее решив систему уравнений:

    k1x + d1 = y
    k2x + d2 = y

    Получаем координаты X и Y общей точки двух прямых (точки пересечения).

    В уравнении необходимо предусмотреть два особых случая, когда прямые параллельны (k1=k2).

    Так как мы имеем дело не с векторами и не с лучами, то есть у линий нет начала и конца, то так же необходимо предусмотреть случай пересечения прямых вне области интереса, т.н. ложное пересечение. Решение этой задачи достигается измерением азимута из ложной точки a3 на точку 2, если азимут a3 = a2, то пересечение ложное, обратный азимут от полученной точки обратно на исходные 2 не должен быть равен одному из исходных азимутов.

    Необходимая процедура на языке Avenue выглядит так:

    Здесь находится расширение для Arcview GIS для расчета точек пересечения двух прямых, включая проверку ложных пересечений.

    В качестве исходных данных для работы используется точечная тема Arcview (в формате shape или заданная как Event theme таблица). Тема должна быть выделена (активна). Пары исходных координат (засечек) в таблице должны располагаться друг за другом.

    Названия полей должны быть следующими:
    X — долгота
    Y — широта
    Bear — азимут (угол от оси Y по часовой стрелке)
    (скрипт легко модифицируется если у вас другие названия полей).

    В названиях полей не должно содержаться символа #. Такие поля следует переименовать. Покрытия Arcinfo некоторые поля которых как правило содержат такой символ нужно сконвертировать в shape-файл и также переименовать поля, убрав #.

    Результатом работы скрипта является shape-файл в атрибутивной таблице которого будут находится расчетные координаты точки пересечения для каждой пары засечек. Полей в исходной таблице может быть больше чем 3 (x, y, bear), дополнительные поля перенесутся в результирующую тему. Они будут заполнятся значениями из первой точки пары из исходной таблицы.

    Ссылки по теме

    • Уравнение прямой
    • Решение линейных систем уравнений (систем уравнений 1-й степени) с двумя неизвестными
    • Вычисление радиуса окружности ошибки для оценки точности GPS-измерений
    • Усреднение данных о перемещении с учетом ошибки локации
    • Построение минимального конвексного полигона с учетом ошибки локации

    Последнее обновление: March 21 2012

    Дата создания: 04.07.2006
    Автор(ы): Максим Дубинин

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: