VMath
Инструменты сайта
Основное
Навигация
Информация
Действия
Содержание
Вычисление расстояний между геометрическими объектами
Линейные многообразия
Расстояние от точки до линейного многообразия (плоскости)
Задача. Найти расстояние от точки $ X_ <0>\in <\mathbb R>^
Теорема 1. [1]. Составим квадратную матрицу порядка $ m+1_<> $:
$$ M=\left( \begin
Доказательство ☞ ЗДЕСЬ.
Расстояние от точки $ X_<0>=(x_<10>,\dots,x_
$$ c_1x_1+\dots+c_nx_n= h $$ равно $$ d= \frac<|c_1x_<10>+\dots+c_nx_
Пусть теперь линейное многообразие (плоскость) задано параметрически $$ \mathbb M= \ < Y_0+\lambda_1 Y_1+\dots+\lambda_k Y_k \quad \mid \quad \<\lambda_1,\dots,\lambda_k\>\subset <\mathbb R>\> $$ при фиксированных столбцах $$ \
Теорема 2. Расстояние $ d_<> $ от точки $ X_ <0>$ до линейного многообразия $ \mathbb M $ вычисляется по формуле
Доказательство. Утверждение теоремы 2 является частным случаем общего результата о вычислении расстояния от точки до линейного многообразия в евклидовом пространстве. ♦
Теорема 3. Ближайшая к точке $ X_0 $ точка многообразия $ \mathbb M_<> $ (проекция точки на многообразие) определяется по формуле
Доказательство ☞ ЗДЕСЬ.
Пример. Найти расстояние от точки $ X_<0>=(1,1,1,1)^ <\top>$ до плоскости
Решение. 1-й способ: применение теоремы 1. Имеем: $$ C=\left( \begin
2-й способ: применение теоремы 2. Общее решение системы уравнений, задающей плоскость: $$ x_3=\frac<5><3>x_1+\frac<4><3>x_2, \ x_4=1-\frac<4><3>x_1+\frac<1><3>x_2 \ . $$ Таким образом, плоскость может быть представлена в параметрическом виде $$ Y_0+\lambda_1 Y_1 + \lambda_2 Y_2 \quad npu \quad Y_0 = \left( \begin
Ответ. $ d=\sqrt <45/58>\approx 0.8808303295 $.
Расстояние между линейными многообразиями (плоскостями)
Пусть линейные многообразия в $ <\mathbb R>^
Теорема. Расстояние между линейными многообразиями $ \mathbb M_1 $ и $ \mathbb M_2 $ вычисляется по формуле
Пример. [2]. Найти расстояние между плоскостями
$$ \left( \begin
Решение. $$ P^<\top>\cdot P=4\cdot E_<4 \times 4>, \quad \tilde P^<\top>\cdot \tilde P= \left(\begin
Ответ. $ d=150_<> $.
Квадратичные многообразия (квадрики)
В последующих пунктах, касающихся вычисления расстояний между геометрическими объектами, хотя бы один из которых представлен квадратным уравнением, используется следующая идеология решения. Первоначальной целью ставится построение уравнения расстояний, т.е. алгебраического уравнения от одной переменной, среди корней которого находится квадрат искомого расстояния. После нахождения этого корня, координаты ближайшей точки (или пары ближайших точек) находятся в виде рациональных функций от величины квадрата расстояния. Таким образом, мы «переворачиваем» традиционную схему решения оптимизационных задач:
стационарные точки $ \rightarrow $ критические значения
Такая реверсия традиционного подхода оправдана, с одной стороны, тем, что задача сводится к одномерной — поиску корней полинома от одной переменной. Причем нас будет интересовать, как правило, единственный корень этого полинома — минимальный положительный. С другой стороны, уравнение расстояний удается построить в результате чисто алгебраической процедуры: конечного числа элементарных алгебраических операций над коэффициентами уравнений, задающих многообразия. Алгоритм основан на аппарате исключения переменных в системах нелинейных алгебраических уравнений, и ключевым объектом в нем оказывается вычисление дискриминанта полинома (от одной или двух переменных).
Расстояние от точки до квадрики
Теорема 1. Пусть квадрика в $ <\mathbb R>^
$$ X^<\top>AX+2B^<\top>X-1=0 \ , (A=A^<\top>) \ . $$ Квадрат расстояния до нее от не лежащей на ней точки $$ X_ <0>\in <\mathbb R>^
[3]. Квадрат расстояния от начала координат $ <\mathbb O>\in <\mathbb R>^
$$ X^<\top>AX+2\,B^<\top>X-1=0 \ , $$ равен минимальному положительному корню уравнения расстояний $$ <\mathcal F>(z)=0, \quad npu \quad <\mathcal F>(z)=<\mathcal D>_ <\mu>\left( f(\mu)(\mu z-1)-B^<\top>q(A,\mu)B \right)\ , $$ и при условии, что указанный корень не является кратным. Здесь $ f(\mu_<>)=\det (A-\mu E) $ — характеристический полином матрицы $ A_<> $, а $ q(A,\mu)_<> $ — матрица взаимная матрице $ A-\mu E_<> $.
В частном случае $ B=<\mathbb O>_<> $ (квадрика центрирована к началу координат), имеем:
$$ <\mathcal F>(z)=\left[z^nf(1/z) \right]^2<\mathcal D>_<\mu>(f(\mu)) \ , $$ и расстояние от начала координат до квадрики оказывается равным $ 1/\sqrt<\lambda_<\max>^<>> $, где $ \lambda_<\max>^<> $ — максимальное собственное число матрицы $ A_<> $.
Пример. Найти расстояние от начала координат до эллипсоида
Решение. Здесь $$A = \left( <\begin
Ответ. $ d= \sqrt
Нахождение точки на квадрике, ближайшей к заданной точке $ X_ <0>$, возможно с помощью следующего результата.
Теорема 2. При выполнении условий теоремы 1, координаты точки $ X_ <\ast>$ квадрики, ближайшей к точке $ X_ <0>$ находятся по формуле
$$ X_<\ast>=-A^ <-1>B — \mu_ <\ast>(A -\mu_<\ast>E)^ <-1>(A^ <-1>B+X_0)=(\mu_<\ast>E- A)^ <-1>(B+\mu_ <\ast>X_0)\ . $$ Здесь $ \mu_ <\ast>$ означает кратный корень полинома $ \Phi(\mu,z_<\ast>) $, где полином $ \Phi(\mu,z) $ берется из формулировки теоремы 1, а $ z_<\ast>^<> $ означает минимальный положительный корень уравнения расстояний.
Этот результат требует пояснений. Итак, поскольку дискриминант полинома $ \Phi(\mu,z_<\ast>) $ обращается в нуль, то у этого полинома — как полинома по $ \mu_<> $ — имеется кратный корень $ \mu =\mu_ <\ast>$. Можно доказать [4], что при условии простоты корня $ z=z_ <\ast>$ уравнения расстояний $ \mathcal F(z)=0 $ кратность корня $ \mu =\mu_ <\ast>$ для полинома $ \Phi(\mu,z_<\ast>) $ будет равна ровно $ 2_<> $, и других кратных корней этот полином не имеет. Но тогда, выражение для $ \mu_<\ast>^<> $ может быть найдено в виде рациональной функции коэффициентов полинома $ \Phi(\mu,z_<\ast>) $. Последнее утверждение может быть доказано разными способами, и в качестве самого наглядного выберем тот, что основан на свойствах дискриминанта, например, на том, что изложено ☞ ЗДЕСЬ.
При выполнении условия предыдущей теоремы, координаты точки $ X_<\ast>^<> $, ближайшей на квадрике к точке $ X_ <0>$, являются рациональными функциями от квадрата расстояния.
Точка $ X_ <\ast>$ квадрики $ X^<\top>AX+2\,B^<\top>X-1=0 $, ближайшая к началу координат $ X_0= \mathbb O $, находится по формуле:
$$ X_ <\ast>= — \frac<1>
Пример. Найти ближайшую к началу координат точку эллипсоида из предыдущего примера.
Решение. Подставляем $ z_<>=z_ <\ast>\approx 1.394685 $ в формулу для определения кратного корня, т.е. в отношение двух конкретных миноров детерминантного представления дискриминанта: $$ \mu=-\frac<\left| \begin
Проверка. Если подставить вместо $ X_ <\ast>$ его приближенное значение, то получим: $$ X_<\ast>^ <\top>X_ <\ast>\approx \mathbf<1.39468>4,\ X_<\ast>^<\top>AX_<\ast>+2\,B^<\top>X_<\ast>-1 \approx 2.9\cdot 10^<-5>\ , $$ и вектор $ <\mathbb O>X_ <\ast>$ перпендикулярен эллипсоиду в точке $ X_<>=X_ <\ast>$: $$ AX_<\ast>+B \approx \left(\begin
Расстояние от линейного многообразия (плоскости) до квадрики
Задача. Найти расстояние от эллипсоида в $ <\mathbb R>^
Теорема. [3]. Необходимое и достаточное условие того, что линейное многообразие (плоскость) пересекает эллипсоид зависит от знакоопределенности матрицы $ A_<> $:
Условие равенства нулю определителя из теоремы является необходимым и достаточным для существования точки касания эллипсоида и плоскости.
Теорема. [3]. Если условие предыдущей теоремы не выполняется, то квадрат расстояния от эллипсоида до плоскости совпадает с минимальным положительным корнем полинома
$$ <\mathcal F>(z) =<\mathcal D>_\mu \left( \mu^m \left| \begin
Если строки матрицы $ C_<> $ ортонормированны, то преобразованием определителя в теореме можно понизить его порядок: выражение под знаком дискриминанта можно преобразовать в
Пример. Найти расстояние от оси $ <\mathbb O>x_ <1>$ до эллипсоида
$$ 7\, x_1^2+6\, x_2^2 +5\, x_3^2 -4\,x_1x_2-4\,x_2x_3-37\,x_1-12\,x_2+3\,x_3+54=0 \ . $$
Решение. Здесь $$ A= \left( \begin
Расстояния в $ <\mathbb R>^
$$ c_1x_1+\dots+c_nx_n = h \ \iff \ CX=h $$ до ближайшей и до самой дальней точек эллипсоида $$ X^<\top>AX+2B^<\top>X-1=0 \ , (A=A^<\top>) $$ совпадают с модулями корней полинома: $$ <\mathcal F>(Z)=\left| \begin
Пример. Найти расстояние от прямой $ 2\, x_1- x_<2>=0 $ до эллипса
$$ 7\,x_1^2-4\,x_1x_2 + 6\, x_2^2-47\, x_1 -24\, x_ <2>+124 = 0 .$$
Решение. Здесь $$ <\mathcal F>(Z)=\left| \begin
Ответ. $$ d = \left| -\frac<199><190>\sqrt<5>+ \frac<1> <76>\sqrt <13570>\right| \approx 0.809219_<> \ . $$
Расстояние между квадриками
Теорема. Пусть $ X^ <\top>A_ <1>X =1 $ и $ X^ <\top>A_ <2>X =1 $ – квадрики в $ <\mathbb R>^
Доказательство ☞ ЗДЕСЬ.
Теорема. [3,4]. Если выполняется условие предыдущей теоремы, то квадрат расстояния между
$$ \mbox <эллипсоидом>\ X^ <\top>A_ <1>X =1\ \mbox<и квадрикой>\ X^ <\top>A_ <2>X =1 $$ совпадает с минимальным положительным корнем уравнения расстояний $$ <\mathcal F>(z)=0 \quad npu \quad <\mathcal F>(z)=<\mathcal D>_ <\lambda>\left( \Phi(\lambda,z) \right) \ . $$ Здесь $$ \Phi(\lambda,z)=\det (\lambda A_1 + (z- \lambda) A_2 — \lambda (z-\lambda) A_1 A_2), $$ $ <\mathcal D>_<> $ — дискриминант полинома рассматриваемого относительно переменной $ \lambda_<> $. Дополнительно предполагается, что указанный корень не является кратным.
Пример. Найти расстояние между эллипсами
$$10\,x_1^2-12\,x_1x_2+8\,x_2^2=1 \qquad u \qquad x_1^2+x_1x_2+x_2^2=1 \ . $$
Решение. Здесь $$ A_1= \left( \begin
Ответ. $ d_<>= \sqrt
Нахождение координат ближайших точек на квадриках (обеспечивающих найденное расстояние) возможно по алгоритму:
1. Если $ z=z_ <\ast>$ — корень полинома $ <\mathcal F>(z) $, то это значит, что полином $$ \Phi(\lambda, z_<\ast>) = \det ( \lambda A_1 +(z_<\ast>-\lambda)A_2 — \lambda (z_<\ast>-\lambda) A_2A_1) $$ имеет кратный корень $ \lambda_<> = \lambda_ <\ast>$. При выполнении условий теоремы, этот корень будет единственным второй кратности и его можно выразить в виде рациональной функции от $ z_ <\ast>$ с помощью субдискриминантов.
2. Столбец координат $ X_<\ast>^<> $ точки первой квадрики, удовлетворяет тогда однородной системе уравнений $$ ( \lambda_ <\ast>A_1 +(z_<\ast>-\lambda_<\ast>)A_2 — \lambda_ <\ast>(z_<\ast>-\lambda_<\ast>) A_2A_1) X = \mathbb O \ , $$ которая имеет бесконечное множество решений, поскольку определитель ее матрицы равен нулю. Из этого бесконечного множества мы выделяем те решения, что удовлетворяют условию $ X^<\top>A_<1>X=1 $.
При выполнении условий теоремы таких решений будет два (что соответствует симметрии задачи, см. рисунок).
Аналогично, столбец координат $ Y_<\ast>^<> $ точки на второй квадрике $ Y^<\top>A_<2>Y=1_<> $ будет решением системы уравнений $$ ( \lambda_ <\ast>A_1 +(z_<\ast>-\lambda_<\ast>)A_2 — \lambda_ <\ast>(z_<\ast>-\lambda_<\ast>) A_1A_2) Y = \mathbb O \ . $$
Для нахождения решений воспользуемся одним из результатов теории систем линейных уравнений. Составим столбец из алгебраических дополнений к элементам какой-либо строки матрицы $$ M= \lambda_ <\ast>A_1 +(z_<\ast>-\lambda_<\ast>)A_2 — \lambda_ <\ast>(z_<\ast>-\lambda_<\ast>) A_2A_1 \ . $$ Тогда вектор $ X_<\ast>^<> $ отличается от этого столбца лишь множителем, который определится из условия $ X^<\top>A_<1>X=1_<> $. Аналогично, для получения столбца координат $ Y_<\ast>^<> $ возьмем столбец из алгебраических дополнений к элементам какого-либо столбца той же матрицы $ M_<> $ и домножим его на константу, чтобы обеспечить выполнение условия $ Y^<\top>A_<2>Y=1_<> $.
3. Получившиеся пары $ X_<\ast>,Y_<\ast>^<> $ надо согласовать: они должны подчиняться условию $$ (X_<\ast>-Y_<\ast>)^<\top>(X_<\ast>-Y_<\ast>)=z_ <\ast>\ . $$
Пример. Найти ближайшие точки эллипсов из предыдущего примера.
Решение. Для найденного значения $ z_<\ast>=z_1 \approx 0.053945666_<> $ определитель матрицы $$ M=\left( \begin
Далее, при найденных значениях $ z_<> $ и $ \lambda_<> $ система линейных уравнений $$ MX=\mathbb O_ <2\times 1>$$ должна иметь бесконечное множество решений относительно вектора $ X_<2\times 1>^<> $. Одно из этих решений может быть построено (см. упражнение ☞ ЗДЕСЬ ) с помощью алгебраических дополнений к элементам, например, второй строки матрицы $ M_<> $: $$ \left( \begin
Ответ. $ \pm (0.3838312,\, 0.4418639)_<> $ и $ \pm (0.5449964,\, 0.6091105)_<> $ соответственно (знаки должны быть согласованы).
Проверка. Если в ответе взять знак $ +_<> $: $$ X_<\ast>-Y_ <\ast>= \left( \begin
Теорема. [3,4].Пусть
$$ X^ <\top>A_<1>X+2\,B^<\top>_1X-1=0 \ \mbox <и>\ X^ <\top>A_<2>X+2\,B^<\top>_2X-1=0 $$ — квадрики в $ <\mathbb R>^
$$ \Theta (z) = <\mathcal D>_\lambda \left( \det \left( \left[ \begin
Для того, чтобы существовала точка касания квадрик
$$ X^ <\top>A_<1>X+2\,B^<\top>_1X-1=0 \ \mbox <и>\ X^ <\top>A_<2>X+2\,B^<\top>_2X-1=0 $$ необходимо и достаточно, чтобы было выполнено условие $$ <\mathcal D>_\lambda \left( \det \left( \left[ \begin
Теорема. [3,4]. Если не выполняется условие предыдущей теоремы, то квадрат расстояния между
$$ \mbox <эллипсоидом>\quad X^ <\top>A_<1>X+2\,B^<\top>_1X-1=0 \quad \mbox < и квадрикой >\quad X^ <\top>A_<2>X+2\,B^<\top>_2X-1=0 $$ совпадает с минимальным положительным корнем полинома $$ <\mathcal F>(z) = $$ $$ =<\mathcal D>_ <\mu_1, \mu_2>\left( \det \left( \mu_1 \left[ \begin
Пример. Найти расстояние между эллипсами
Ответ. $ d \approx \sqrt <9.0183982802>\approx 3.00306481 $.
Нахождение ближайших точек на квадриках (обеспечивающих найденное расстояние) возможно по следующему алгоритму.
2. Составим матрицу $$ M= \mu_ <1\ast>A_1+\mu_<2\ast>A_2-A_2A_1 \ . $$ Тогда координатные столбцы ближайших точек на квадриках вычисляются по формулам: $$ X_<\ast>=M^ <-1>(A_2B_1-\mu_ <1\ast>B_1-\mu_<2\ast>B_2),\ Y_<\ast>=(M^<-1>)^<^<\top>> (A_1B_2 — \mu_ <1\ast>B_1-\mu_<2\ast>B_2). $$
Пример. Найти ближайшие точки эллипсов из предыдущего примера.
Ответ. $$ X_<\ast>\approx \left(\begin
Проверка. $$ (X_<\ast>-Y_<\ast>)^<\top>(X_<\ast>-Y_<\ast>)\approx \mathbf<9.018398280>3\ , $$ $$ X_<\ast>^<\top>A_1X_<\ast>+2B_1^<\top>X_<\ast>-1 \approx 1\cdot 10^<-9>\ , \ Y_<\ast>^<\top>A_2Y_<\ast>+2B_2^<\top>Y_<\ast>-1\approx -3\cdot 10^<-10>\ , $$ и вектор $ X_<\ast>-Y_<\ast>^<> $ перпендикулярен обоим эллипсам в соответствующих ближайших точках: $$ A_1X_<\ast>+B_1= \left(\begin
Пример. Найти расстояние между эллипсоидами
$$ 7\,x_1^2+6\,x_2^2+5\,x_3^2-4\,x_1x_2-4\,x_2x_3-37\,x_1-12\,x_2+3\,x_3+54=0$$ и $$ 189\,x_1^2+x_2^2+189\,x_3^2+2\,x_1x_3-x_2x_3-27=0\ .$$
Ответ. $ d \approx \sqrt <1.3537785005>\approx 1.1635198754_<> $
Алгебраические кривые и многообразия
Расстояние от точки до плоской алгебраической кривой
Задача. Пусть алгебраическая кривая задана уравнением $$ \Phi(x,y)=0 \ . $$ Здесь $ \Phi_<>(x,y) $ — отличный от константы полином от $ x_<> $ и $ y_<> $ с вещественными коэффициентами. Требуется найти расстояние до этой кривой от начала координат.
Здесь возникает проблема, которую для рассмотренных выше случаев удавалось либо обойти, либо же сравнительно дешево решить: это проблема существования решения. Дело в том, что уравнение может не иметь вещественных решений, то есть не определять никакой кривой на плоскости $ \mathbb R^ <2>$.
Будем решать задачу сначала для частного случая — пусть полином $ \Phi_<>(x,y) $ является четным по переменной $ y_<> $. Геометрически это означает, что кривая (если она существует) будет зеркально симметричной относительно оси $ \mathbb Ox $. А с аналитической точки зрения такой полином можно представить в виде полинома $$ F(x,Y) \equiv \Phi_<>(x,y) \quad npu \quad Y=y^2 \ . $$
Теорема 1 [6]. Пусть $ \Phi_<>(x,y) \equiv \Phi_<>(x,-y) $. Уравнение $ \Phi_<>(x,y)=0 $ не имеет вещественных решений если одновременно выполняются два условия:
a) уравнение $ \Phi(x,0)=0 $ не имеет вещественных решений;
б) уравнение $$ \mathcal F(z)=\mathcal D_x( F(x,z-x^2))=0 $$ не имеет положительных решений.
Если хотя бы одно из этих условий не выполняется, то квадрат расстояния от начала координат до кривой $ \Phi(x_<>,y)=0 $ равен либо квадрату минимального по модулю вещественного корня уравнения $ \Phi(x,0)=0 $, либо же минимальному положительному корню уравнения $ \mathcal F(z)= 0 $, при условии, что последний не является кратным. Здесь $ <\mathcal D>_<> $ — дискриминант полинома, рассматриваемого относительно переменной $ x_<> $.
Пример. Найти расстояние от начала координат до кривой
Решение. Уравнение $$ \Phi(x,0)=x^6-6\,x^5+25\,x-45=0 $$ имеет вещественные корни $ \mu_1\approx -1.621919 $ и $ \mu_2 \approx 5.986387 $. Далее, $$ F(x,Y)=x^6-5\,x^4Y-Y^3-6\,x^5+6\,xY^2+10\,Y^2+25\,x-45 $$ и полином $$ \mathcal F(z)=\mathcal D_x (F(x,z-x^2))= <\scriptstyle 124422592>\,z^<15>—<\scriptstyle 1996675968>z^<14>—<\scriptstyle 26107738048>\,z^<13>+<\scriptstyle 270691240064>\,z^<12>+ <\scriptstyle 1462429768576>z^ <11>$$ $$ —<\scriptstyle 31070151855680>z^<10>+ <\scriptstyle 104850679100160>\,z^9+<\scriptstyle 106422502370800>\,z^8-<\scriptstyle 1956603249193600>\,z^7+<\scriptstyle 1683409252901600>\,z^6+ $$ $$ +<\scriptstyle 3565828983027500>z^5 —<\scriptstyle 23058839076745500>\,z^4+<\scriptstyle 30272455856370000>\,z^3+<\scriptstyle 28139412928130000>\,z^2-<\scriptstyle 97452805338000000>\, z+ $$ $$ + <\scriptstyle 171049864407603125>$$ имеет минимальный положительный корень равный $ \lambda \approx 1.965293 $. Поскольку $ \sqrt <\lambda>4) , задача о трёх заводах.
Пример. В точках $ P_<1>,P_2,P_3 $ расположены источники полезных ископаемых: железной руды, угля и воды соответственно. Известно, что для производства одной тонны стали необходимо иметь $ m_ <1>$ тонн руды, $ m_2 $ тонн угля и $ m_3 $ тонн воды. В предположении, что стоимость перевозки одной тонны груза не зависит от его природы, где следует расположить сталелитейное производство так, чтобы минимизировать транспортные издержки?
Подробное обсуждение этой задачи (и к ней примыкающих) ☞ ЗДЕСЬ.
Задача о точке Лемуана-Греба
Задача. Найти точку плоскости, cумма квадратов расстояний от которой до сторон треугольника, лежащего в этой же плоскости, минимальна.
Решение. Пусть $ d_1, d_2,d_3 $ — расстояния от точки $ P_<> $ плоскости до сторон треугольника с длинами $ D_1, D_2, D_3 $ соответственно. Воспользуемся тождеством Лагранжа: $$ (d_1^2+ d_2^2+d_3^2)(D_1^2+ D_2^2+D_3^2)\equiv $$ $$ \equiv (d_1D_1+ d_2D_2+d_3D_3)^2+(d_1D_2-d_2D_1)^2+(d_2D_3-d_3D_2)^2+ (d_1D_3-d_3D_1)^2 \ . $$ Величина $ d_1D_1+ d_2D_2+d_3D_3 $ является постоянной, не зависящей от координат точки $ P_<> $: $$ d_1D_1+ d_2D_2+d_3D_3 =2S \ , $$ где $ S_<> $ — площадь данного треугольника. Следовательно $ \min (d_1^2+d_2^2+d_3^2) $ достигается при условиях $$ d_1D_2-d_2D_1=0,\ d_2D_3-d_3D_2=0,\ d_1D_3-d_3D_1=0 \ , $$ то есть когда $$ \frac
Еще некоторые задачи
Построение прямой на плоскости, сумма квадратов расстояний до которой от заданных точек минимальна ☞ ЗДЕСЬ
Наименьшее расстояние между точкой и окружностью
Данный круг с данным радиусом имеет свой центр в определенной позиции в координатной плоскости. В координатной плоскости задается другая точка. Задача — найти кратчайшее расстояние между точкой и окружностью.
Примеры:
Подход :
который равен (др)
d = √ ((x2-x1) ^ 2 — (y2-y1) ^ 2)
Ниже приведена реализация вышеуказанного подхода:
// C ++ программа для поиска
// Наименьшее расстояние
// между точкой и
// круг
#include
using namespace std;
// Функция для поиска кратчайшего расстояния
void dist( double x1, double y1, double x2, double y2, double r)
cout «The shortest distance «
«between a point and a circle is «
sqrt (( pow ((x2 — x1), 2))
double x1 = 4, y1 = 6,
x2 = 35, y2 = 42, r = 5;
dist(x1, y1, x2, y2, r);
// Java-программа для поиска
// Наименьшее расстояние
// между точкой и
// круг
// Функция для поиска кратчайшего расстояния
static void dist( double x1, double y1, double x2,
double y2, double r)
System.out.println( «The shortest distance «
+ «between a point and a circle is «
+ (Math.sqrt((Math.pow((x2 — x1), 2 ))
+ (Math.pow((y2 — y1), 2 )))
public static void main(String[] args)
double x1 = 4 , y1 = 6 ,
x2 = 35 , y2 = 42 , r = 5 ;
dist(x1, y1, x2, y2, r);
/ * Этот код предоставлен PrinciRaj1992 * /
# Python программа для поиска
# Наименьшее расстояние
# между точкой и
# круг
# Функция поиска кратчайшего расстояния
def dist(x1, y1, x2, y2, r):
print ( «The shortest distance between a point and a circle is «
,((((x2 — x1) * * 2 ) + ((y2 — y1) * * 2 )) * * ( 1 / 2 )) — r);
dist(x1, y1, x2, y2, r);
# Этот код предоставлен 29AjayKumar
// C # программа для поиска кратчайшего расстояния
// между точкой и окружностью
// Функция для поиска кратчайшего расстояния
static void dist( double x1, double y1, double x2,
double y2, double r)
Console.WriteLine( «The shortest distance «
+ «between a point and a circle is «
+ (Math.Sqrt((Math.Pow((x2 — x1), 2))
+ (Math.Pow((y2 — y1), 2)))
public static void Main(String[] args)
double x1 = 4, y1 = 6,
x2 = 35, y2 = 42, r = 5;
dist(x1, y1, x2, y2, r);
/ * Этот код предоставлен PrinciRaj1992 * /
// PHP программа для поиска
// Наименьшее расстояние
// между точкой и
// круг
// Функция для поиска кратчайшего расстояния
function dist( $x1 , $y1 , $x2 , $y2 , $r )
echo «The shortest distance between a point and a circle is «
Вычислительная геометрия, или как я стал заниматься олимпиадным программированием. Часть 2
Вступление
Это вторая часть моей статьи посвящена вычислительной геометрии. Думаю, эта статья будет интереснее предыдущей, поскольку задачки будут чуть сложнее.
Начнем с взаимного расположения точки относительно прямой, луча и отрезка.
Задача №1
Определить взаимное расположении точки и прямой: лежит выше прямой, на прямой, под прямой.
Решение
Понятно, что если прямая задана своим уравнением ax + by + c = 0, то тут и решать нечего. Достаточно подставить координаты точки в уравнение прямой и проверить чему оно равно. Если больше нуля, то точка находится в верхней полуплоскости, если равна нулю, то точка находится на прямой и если меньше нуля, то точка находится в нижней полуплоскости. Интереснее случай, когда прямая задана, задана координатами двух точек назовем их P1(x1, y1), P2(x2, y2). В этом случае можно спокойно найти коэффициенты a, b и c и применить предыдущее рассуждение. Но надо сначала подумать, оно нам надо? Конечно, нет! Как я говорил косое произведения — это просто жемчужина вычислительной геометрии. Давайте применим его. Известно, что косое произведение двух векторов положительно, если поворот от первого вектора ко второму идет против часовой стрелки, равно нулю, если векторы коллинеарны и отрицательно, если поворот идет по часовой стрелки. Поэтому нам достаточно посчитать косое произведение векторов P1P2 и P1M и по его знаку сделать вывод.
Задача №2
Определить принадлежит ли точка лучу.
Решение
Давайте вспомним, что такое луч: луч — это прямая, ограниченная точкой с одной стороны, а с другой стороны бесконечная. То есть луч задается некоторой начальной точкой и любой точкой лежащей на нем. Пусть точка P1(x1, y1) — начало луча, а P2(x2, y2) — любая точка принадлежащая лучу. Понятно, что если точка принадлежит лучу, то она принадлежит и прямой проходящей через эти точки, но не наоборот. Поэтому принадлежность прямой является необходимым, но не достаточным условием для принадлежности лучу. Поэтому от проверки косового произведения нам никуда не деться. Для достаточного условия нужно вычислить еще и скалярное произведение тех же векторов. Если оно меньше нуля, то точка не принадлежит лучу, если же оно не отрицательно, то точка лежит на луче. Почему так? Давайте посмотрим на рисунок.
Итак, для того чтобы точка M(x, y) лежала на луче с начальной точкой P1(x1, y1), где P2(x2, y2) лежит на луче необходимо и достаточно выполнения двух условий:
1. [P1P2, P1M] = 0 – косое произведение (точка лежит на прямой)
2. (P1P2, P1M) ≥ 0 – скалярное произведение (точка лежит на луче)
Задача №3
Определить принадлежит ли точка отрезку.
Решение
Пусть точки P1(x1, y1), P2(x2, y2) концы заданного отрезка. Опять-таки необходимым условием принадлежности точки отрезку является ее принадлежность прямой проходящей через P1, P2. Далее нам нужно определить лежит ли точка между точками P1 и P2, для этого нам на помощь приходит скалярное произведение векторов только на этот раз других: (MP1, MP2). Если оно меньше либо равно нуля, то точка лежит на отрезке, иначе вне отрезка. Почему так? Посмотрим на рисунок.
Итак, для того чтобы точка M(x, y) лежала на отрезке с концами P1(x1, y1), P2(x2, y2) необходимо и достаточно выполнения условий:
1. [P1P2, P1M] = 0 – косое произведение (точка лежит на прямой)
2. (MP1,MP2) ≤ 0 – скалярное произведение (точка лежит между P1 и P2)
Задача №4
Взаимное расположение двух точек относительно прямой.
Решение
В этой задаче необходимо определить по одну или по разные стороны относительно прямой находятся две точки.
Если точки находятся по разные стороны относительно прямой, то косые произведения имеют разные знаки, а значит их произведение отрицательно. Если же точки лежат по одну сторону относительно прямой, то знаки косых произведений совпадают, значит, их произведение положительно.
Итак:
1. [P1P2, P1M1] * [P1P2, P1M2] 0 – точки лежат по одну сторону.
3. [P1P2, P1M1] * [P1P2, P1M2] = 0 – одна (или две) из точек лежит на прямой.
Кстати, задача об определении наличия точки пересечения у прямой и отрезка решается точно также. Точнее, это и есть эта же задача: отрезок и прямая пересекаются, когда концы отрезка находятся по разные стороны относительно прямой или когда концы отрезка лежат на прямой, то есть необходимо потребовать [P1P2, P1M1] * [P1P2, P1M2] ≤ 0.
Задача №5
Определить пересекаются ли две прямые.
Решение
Будем считать, что прямые не совпадают. Понятно, что прямые не пересекаются, только если они параллельны. Поэтому, найдя условие параллельности, мы можем, определить пересекаются ли прямые.
Допустим прямые заданы своими уравнениями a1x + b1y + c1 = 0 и a2x + b2y + c2 = 0. Тогда условие параллельности прямых заключается в том, что a1b2 — a2b1 = 0.
Если же прямые заданы точками P1(x1, y1), P2(x2, y2), M1(x3, y3), M2(x4, y4), то условие их параллельности заключается в проверки косого произведения векторов P1P2 и M1M2: если оно равно нулю, то прямые параллельны.
В общем, то когда прямые заданы своими уравнениями мы тоже проверяем косое произведение векторов (-b1, a1), (-b2, a2) которые называются направляющими векторами.
Задача №6
Определить пересекаются ли два отрезка.
Решение
Вот эта задача мне, действительно, нравится. Отрезки пересекаются тогда, когда, концы каждого отрезка лежат по разные стороны от другого отрезка. Посмотрим на рисунок:
Итак, нам нужно проверить, чтобы концы каждого из отрезков лежали по разные стороны относительного концов другого отрезка. Пользуемся косым произведением векторов. Посмотрите на первый рисунок: [P1P2, P1M2] > 0, [P1P2, P1M1] [P1P2, P1M2] * [P1P2, P1M1] 2 + b 2 ).
Задача №8
Расстояние от точки до луча.
Решение
Эта задача отличается от предыдущей тем, что в этом случае может получиться, так что перпендикуляр из точки не падает на луч, а падает на его продолжение.
В случае, когда перпендикуляр не падает на луч необходимо найти расстояние от точки до начала луча – это и будет ответом на задачу.
Как же определить падает ли перпендикуляр на луч или нет? Если перпендикуляр не падает на луч, то угол MP1P2 – тупой иначе острый (прямой). Поэтому по знаку скалярного произведения векторов мы можем определить попадает ли перпендикуляр на луч или нет:
1. (P1M, P1P2) 2 .
Теперь рассмотрим случай, когда центр второго круга O2 находится между точками O1 и C. В этом случае получим отрицательное значение величины d2. Использование отрицательного значения d2 приводит к отрицательному значению α. В этом случае необходимо для правильного ответа прибавить к α 2π.
Заключение
Ну вот и все. Мы рассмотрели не все, но наиболее часто встречаемые задачи вычислительной геометрии касающиеся взаимного расположения объектов.
http://espressocode.top/shortest-distance-between-a-point-and-a-circle/
http://habr.com/ru/post/148325/