Расстояние между векторами как найти: Длина вектора Расстояние между двумя точками в пространстве

Векторы. Метод координат. Угол между прямыми, плоскостями. Расстояние от точки до плоскости, между скрещивающимися прямыми

\({\color{red}{\textbf{Факт 1. Про векторы}}}\)
\(\bullet\) Если в пространстве заданы две точки \(A(x_1;y_1;z_1)\) и \(B(x_2;y_2;z_2)\), то вектор \(\overrightarrow{AB}\) имеет координаты \[\overrightarrow{AB} = \{x_2-x_1;y_2-y_1;z_2-z_1\}\]
\(\bullet\) Если в пространстве заданы два вектора \(\vec{a} =\{x_1;y_1;z_1\}\) и \(\vec{b}= \{x_2;y_2;z_2\}\), то:

 

\(\qquad \blacktriangleright\) сумма этих векторов \(\vec{a}+\vec{b}=\{x_1+x_2;y_1+y_2;z_1+z_2\}\)

 

\(\qquad \blacktriangleright\) разность этих векторов \(\vec{a}-\vec{b}=\{x_1-x_2;y_1-y_2;z_1-z_2\}\)

 

\(\qquad \blacktriangleright\) произведение вектора на число \(\lambda \vec{a}=\{\lambda x_1;\lambda y_1;\lambda z_1\}\)   \(\bullet\) Если в пространстве заданы две точки \(A(x_1;y_1;z_1)\) и \(B(x_2;y_2;z_2)\), а точка \(O\) — середина отрезка \(AB\), то \(O\) имеет координаты \[O\left(\dfrac{x_1+x_2}2;\dfrac{y_1+y_2}2;\dfrac{z_1+z_2}2\right)\]
\(\bullet\) Длина вектора \(\vec{a}=\{x;y;z\}\) обозначается \(|\vec{a}|\) и вычисляется по формуле \[|\vec{a}|=\sqrt{x^2+y^2+z^2}\]

\(\bullet\) Заметим, что расстояние между двумя точками есть не что иное, как длина вектора с началом и концом в этих точках.  

\({\color{red}{\textbf{Факт 2. Про скалярное произведение}}}\)
\(\bullet\) Скалярным произведением двух векторов называется произведение длин этих векторов на косинус угла между ними: \[{\large{(\vec{a}, \vec{b})=|\vec{a}|\cdot|\vec{b}|\cdot\cos \angle (\vec{a}, \vec{b})}}\] На рисунке показано, что такое угол между векторами:

\(\bullet\) Справедливы следующие утверждения:

 

I. Скалярное произведение ненулевых векторов (их длины не равны нулю) равно нулю тогда и только тогда, когда они перпендикулярны: \[(\vec{a}, \vec{b})=0 \quad\Leftrightarrow\quad \vec{a}\perp \vec{b}\]

II. Длина вектора равна квадратному корню из скалярного произведения вектора на себя: \[|\vec{a}|=\sqrt{(\vec{a}, \vec{a})}\]

III. Переместительный закон: \[(\vec{a}, \vec{b})=(\vec{b}, \vec{a})\]

IV. Распределительный закон: \[(\vec{a}+\vec{b}, \vec{c})=(\vec{a}, \vec{c})+(\vec{b}, \vec{c})\]

V. 2_2}}}}\]  

\({\color{red}{\textbf{Факт 3. Про уравнение плоскости}}}\)
\(\bullet\) Если \(\vec{n}=\{a;b;c\}\) – нормаль к плоскости, то уравнение плоскости имеет вид \[ax+by+cz+d=0\] Для того, чтобы найти \(d\), нужно подставить в уравнение плоскости вместо \(x, y, z\) координаты любой точки, лежащей в этой плоскости.   Пример: если \(\vec{n}=\{1;2;3\}\) – нормаль к плоскости, \(O(4;5;6)\) – точка из плоскости, то справедливо: \(1\cdot 4+2\cdot 5+3\cdot 6+d=0\), откуда \(d=-32\), следовательно, уравнение плоскости имеет вид \(x+2y+3z-32=0\).   \(\bullet\) Уравнение плоскости можно составить, используя три точки из плоскости, не лежащие на одной прямой.
Пусть \(A(1;0;0), \ B(0;3;4), \ C(2;0;5)\) – точки из плоскости. Тогда уравнение плоскости можно найти, решив систему: \[\begin{cases} 1\cdot a+0\cdot b+0\cdot c+d=0\\ 0\cdot a+3\cdot b+4\cdot c+d=0\\ 2\cdot a+0\cdot b+5\cdot c+d=0\end{cases} \quad\Rightarrow\quad \begin{cases} d=-a\\ 3b+4c-a=0\\ a+5c=0\end{cases}\quad\Rightarrow\quad \begin{cases} d=-a\\ a=-5c\\ b=-3c\end{cases}\quad\Rightarrow\quad\begin{cases}a=-5c\\ b=-3c\\ d=5c\end{cases}\] Следовательно, уравнение плоскости имеет вид: \[-5c\cdot x-3c\cdot y+c\cdot z+5c=0\] Можно разделить обе части на \(c\), так как \(c\ne 0\) (иначе \(a=b=c=d=0\)), следовательно, уравнение плоскости имеет вид \[-5x-3y+z+5=0\]  

\({\color{red}{\textbf{Факт 4. 2}}\]
\(\bullet\) Для того, чтобы найти расстояние между скрещивающимися прямыми, нужно
— построить плоскость, проходящую через одну из них и параллельную другой;
— найти уравнение этой плоскости;
— найти расстояние от любой точки первой прямой до этой плоскости.

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

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

s = |x2 − x1|, (3)

где х1х2 − координаты точек А1 и А2 соответственно.  Очевидно, что расстояние от А1 до А2 равно расстоянию от А

2 до А1, что и привело у к тому, что в формуле (3) появился знак модуля числа.  Пусть на плоскости задана система координат ХОY, в которой координаты точки А1 равны х1 и у1, а координаты точки А2, соответственно, равны х2 и у2 (рис. 8).

рис. 8

 В прямоугольном треугольнике А1А2В длина стороны А2В равна 2 − х1|, а длина стороны А1В = |у2 − у1|, поэтому расстояние между точками А1 и А2 можно найти по теореме Пифагора:

s = √{(x2

 − x1)2 + (y2 − y1)2}. (4)

Сложение векторов

Пусть даны два вектора   и  . Приложим вектор   к точке   (концу вектора  ) и получим вектор   (рис.1.7,а; здесь и далее равные векторы отмечены одинаковыми засечками). Вектор   называется суммой векторов   и   и обозначается  . Это нахождение суммы называется правилом треугольника.

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

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

правило ломаной) можно сложить любое конечное число векторов. Заметим, что сумма векторов не зависит от точек приложения слагаемых и от порядка суммирования. Например, «выстраивая цепочку» векторов для суммы в виде  , получим вектор, равный вектору  . Если ломаная получилась замкнутой, то сумма равна нулевому вектору.

Вычитание векторов

Вектор   называется противоположным вектору  , если их сумма равна нулевому вектору:  . Противоположный вектор   имеет длину  , коллинеарен и противоположно направлен вектору   (рис.1.8,а,б). Нулевой вектор является противоположным самому себе.

Разностью векторов   и   называется сумма вектора   с вектором  , противоположным вектору  :

Для нахождения разности векторов   и   приложим к произвольной точке   векторы  , а также вектор  , противоположный вектору   (рис.1.9,а). Искомую разность находим по правилу параллелограмма:

Для нахождения разности проще использовать правило треугольника (рис. 1.9,6). Для этого прикладываем к произвольной точке   векторы  . Вектор   при этом равен искомой разности  .

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

Пример 1.2. Для векторов на рис. 1.6 найти следующие суммы и разности:

Решение. Учитывая равенство  , получаем по правилу треугольника  .

Поскольку   и  , то  .

По правилу параллелограмма  .

Так как   и  , находим 

Умножение вектора на число

Произведением ненулевого вектора а на действительное число   называется вектор  , удовлетворяющий условиям:

1) длина вектора   равна  , т.е.  ;

2) векторы   и   коллинеарные  ;

3) векторы   и   одинаково направлены, если  , и противоположно направлены, если  .

Произведение нулевого вектора на любое число   считается (по определению) нулевым вектором:  ; произведение любого вектора на число нуль также считается нулевым вектором:  . Из определения произведения следует, что:

а) при умножении на единицу   вектор не изменяется:  ;

б) при умножении вектора на   получается противоположный вектор:  ;

в) деление вектора на отличное от нуля число   сводится к его умножению на число  , обратное  .

г) при делении ненулевого вектора   на его длину, т.е. при умножении   на число   получаем единичный вектор, одинаково направленный с вектором  .

Действительно, длина вектора   равна единице:  .

Вектор   коллинеарен и одинаково направлен с вектором  , так как  ;

д) при умножении единичного вектора на число   получаем коллинеарный ему вектор, длина которого равна  .

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

Свойства линейных операций над векторами

Сложение векторов и умножение вектора на число называются линейными операциями над векторами. 2):

CREATE OR REPLACE FUNCTION public.euclidian(
  arr1 double precision[],
  arr2 double precision[])
  RETURNS double precision AS
$BODY$
  select sqrt(SUM(tab.v)) as euclidian from (SELECT 
     UNNEST(vec_sub(arr1,arr2)) as v) as tab;
$BODY$
LANGUAGE sql IMMUTABLE STRICT

Вспомогательная функция:

CREATE OR REPLACE FUNCTION public.vec_sub(
  arr1 double precision[],
  arr2 double precision[])
RETURNS double precision[] AS
$BODY$
  SELECT array_agg(result)
    FROM (SELECT (tuple.val1 - tuple.val2)*(tuple.val1 - tuple.val2) 
        AS result
        FROM (SELECT UNNEST($1) AS val1
               ,UNNEST($2) AS val2
               ,generate_subscripts($1, 1) AS ix) tuple
    ORDER BY ix) inn;
$BODY$
LANGUAGE sql IMMUTABLE STRICT

Запрос :

select tab.id as tabid, tab.name as tabname, 
        euclidian(target_vector,tab.vector) as eucl from tab 
order by eulc ASC
limit 1

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

Вопрос — как можно изловчиться и обеспечить индексный поиск в таблице tab при выполнении запроса? Чтобы хотя бы 90% ненужных записей отбрасывалось по индексу, а в оставшихся 10% уже допустимо полным перебором пройти.

P.S. одно из текущих направлений поиска решения: расширение PostGIS позволяет вести поиск и сортировку по расстоянию (ST_3DDistance), фильтр по удаленности (ST_3DWithin) и пр. в 3-х мерном пространстве — делается это быстро по индексам. Может быть как-то кто-то это абстрагировал на случай N-мерного пространства?

P.S.2. данные метеорологических наблюдений:

  • сделал запрос select max(val), min(val) from (select unnest(vector) as val from tab) as tab1 — 0.485470712185 -0. 41735497117 — я точно не знаю, думаю значения координат в теории не превышают 1.0 по модулю
  • при этом векторы не нормализованы, расстояние от (0,0,…0) лежит в пределах от 1.2 до 1.6.

P.S.3. Подобную задачу не первый раз решаю — предыдущий раз это было связано с поиском ближайшей точки в облаке точек (3D), но там у меня было все локально в памяти (база данных iBoxDB), там даже и не рыпался от полного перебора уйти… а тут вся мощь сервера postgresql — из принципа хочется решить).

P.S.4. Исходя из данных наблюдений, максимальное расстояние между точками (на основании имеющейся статистики) составляет примерно 3.2 — расширим на всякий случай до 5, ну или до 10. Мне точно не интересны точки, отдаленные друг от друга более чем на 1.0. Выделим из 128-мерного пространства несколько (сколько не жалко, скажем 10,20) трехмерных проекций — наборов координат (v1,v2,v3), (v4,v5,v6), и т.д. Очевидно, если в одной из трехмерных проекций расстояние превысило лимит (1.0) — то меньшим на полном наборе координат оно точно уже не станет. Далее пытаемся применить то что есть в PostGIS — индексируем каждую их трехмерных проекций векторов и затем при поиске ставим фильтры с помощью ST_3DWithin < 1.0 (количество фильтров будет равно количеству выделенных трехмерных проекций). Стоит попробовать в новогоднюю ночь 🙂 Очень бы хотелось компетентный комментарий гуру по PostGIS — случится ли чудо в новогоднюю ночь, или можно спокойно веселиться? 🙂

P.S.5. В сторону buckets предлагаю больше не копать — во первых их ну ооочень много получится, как не раскидывай — даже если строить на проекции а не на полной размерности, скажем взять первых 64 координаты и раскидать по букетам (<0,>=0) — получится 18446744073709551616 возможных букетов — куда тут… Во вторых, есть проблема границ букетов — точки могут находиться на минимальном расстоянии но попасть в соседние букеты, это нада учитывать в запросах, для этого нужно держать диаграмму соседей для каждого букета… если же применять простейшее разбиение (<0,>=0) — оно в принципе теряет всякий смысл, потому что для одной оси граница только одна и нужно все равно искать и там и там. .. а если разбивать каждую ось на 4 диапазона — количество букетов уверенно уйдёт в бесконечность… В третьих, не хотелось бы создавать велосипед с помощью напильника — если ГИС-системы решают задачу на трехмерных координатах — либо абстрагировать эти механизмы на большие размерности, либо выделять 3х мерные проекции и пытаться индексировать на них.

Расстояние между векторами — исчисление 3

Все ресурсы исчисления 3

6 Диагностические тесты 373 практических теста Вопрос дня Карточки Learn by Concept

← Предыдущая 1 2 3 4 5 Следующая →

Исчисление 3 Помощь » Векторы и векторные операции » Расстояние между векторами

По векторам

найти расстояние между ними, .

 

Возможные ответы:

Правильный ответ:

Объяснение:

, чтобы найти расстояние между векторами

Мы делаем следующий расчет:

Отчет о ошибке

Найдите расстояние между двумя векторами

33. :

Правильный ответ:

Объяснение:

, чтобы найти расстояние между двумя векторами

Мы делаем следующий расчет

Отчет о ошибке

.

Правильный ответ:

Объяснение:

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

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

Сообщить об ошибке

Найдите расстояние между   если  и .

Возможные ответы:

Правильный ответ:

Пояснение:

Напишите формулу для нахождения модуля вектора .

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

Ответ:

Сообщить об ошибке Возможные ответы:

Ничего из вышеперечисленного

Правильный ответ:

5 Объяснение:

Сначала нам нужно найти 

, поэтому

Сообщить об ошибке

Вычислить расстояние между векторами  и .

Возможные ответы:

Правильный ответ:

Объяснение:

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

и

равна

.

Используя заданные векторы, получаем

Сообщить об ошибке

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

Возможные ответы:

Правильный ответ:

Объяснение:

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

,

, где один вектор

, а другой

.

Используя заданные нам векторы, получаем

.

Сообщить об ошибке

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

Возможные ответы:

Правильный ответ:

Объяснение:

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

,

, где один вектор

, а другой

.

Используя заданные векторы, мы получаем

.

Сообщить об ошибке

Расстояние между (1, 3, -10) и (2, 5, 4) равно

Возможные ответы:

Ничего из перечисленного

Правильный ответ:

Объяснение:

Мы используем формулу расстояния:

Сообщить об ошибке

Учитывая точки P :(2,−1,5) и Q :(−2,0,3). Величина вектора от P до равна:

Возможные ответы:

Ничего из вышеперечисленного

Правильный ответ:

Объяснение:

Сначала нам нужно найти:

Следовательно,

Отчет о ошибке

← Предыдущий 1 2 3 4 5 Следующий →

Уведомление об авторских правах

Все расчет 3 Ресурсы

660004. Тесты 373 практических теста Вопрос дня Карточки Учитесь по концепции

scipy.spatial.distance.cdist — Руководство по SciPy v1.9.3

scipy.spatial.distance.cdist( XA , XB , metric=’евклидов’ , * , out=None , **kwargs 3)[68]

Вычислить расстояние между каждой парой двух наборов входных данных.

Общие соглашения о вызовах см. в примечаниях.

Параметры
XA массив_подобный

Массив \(m_A\) по \(n\) из \(m_A\) оригинальные наблюдения в \(n\)-мерном пространстве. Входы преобразуются в тип с плавающей запятой.

XB array_like

Массив \(m_B\) на \(n\) из \(m_B\) оригинальные наблюдения в \(n\)-мерном пространстве. Входы преобразуются в тип с плавающей запятой.

метрика str или вызываемая, необязательная

Используемая метрика расстояния. Если строка, функция расстояния может быть «брейкертис», «канберра», «чебышев», «городской квартал», «корреляция», «косинус», «игральные кости», «евклидово», «хамминг», «жаккард», «дженсеншаннон», «kulczynski1», «mahalanobis», «matching», «minkowski», «Рогерстанимото», «Расселрао», «Севклидов», «Сокалмихенер», ‘sokalsneath’, ‘sqeuclidean’, ‘yule’.

**kwargs dict, необязательный

Дополнительные аргументы для метрики : см. документацию по каждой метрике для список всех возможных аргументов.

Некоторые возможные аргументы:

p : скаляр P-норма для Минковского, взвешенная и невзвешенная. По умолчанию: 2.

w : массив_подобный Весовой вектор для метрик, поддерживающих веса (например, Минковского).

В : массив_подобный Вектор дисперсии для стандартизированного евклидова. По умолчанию: var(vstack([XA, XB]), ось=0, ddof=1)

VI : array_like Обратная ковариационная матрица для Махаланобиса. По умолчанию: inv(cov(vstack([XA, XB].T))).T

выход: ndarray Выходной массив Если не None, матрица расстояний Y хранится в этом массиве.

Возвращает
Y ndarray

Возвращается матрица расстояний \(m_A\) на \(m_B\). Для каждого \(i\) и \(j\) метрика dist(u=XA[i], v=XB[j]) вычисляется и сохраняется в \(ij\)-я запись.

Поднимает
ValueError

Исключение выдается, если XA и XB не имеют одинаковое количество столбцов.

Примечания

Ниже приведены общепринятые соглашения о вызовах:

  1. Y = cdist(XA, XB, "евклидово")

    Вычисляет расстояние между \(m\) точками, используя Евклидово расстояние (2-норма) как метрика расстояния между точки. Точки расположены как \(m\) \(n\)-мерные векторы-строки в матрице X.

  2. Y = cdist(XA, XB, 'Минковский', p=2.)

    Вычисляет расстояния, используя расстояние Минковского \(\|u-v\|_p\) (\(p\)-норма), где \(p > 0\) (примечание что это квазиметрика только в том случае, если \(0 < p < 1 \)).

  3. Y = cdist(XA, XB, 'городской квартал')

    Вычисляет расстояние в квартале или на Манхэттене между точки.

  4. Y = cdist(XA, XB, 'севклидово', V=нет)

    92\) между векторы.

  5. Y = cdist(XA, XB, 'косинус')

    Вычисляет косинусное расстояние между векторами u и v,

    \[1 — \frac{u \cdot v} {{\|и\|}_2 {\|v\|}_2}\]

    , где \(\|*\|_2\) — 2-норма его аргумента * , и \(u \cdot v\) является скалярным произведением \(u\) и \(v\).

  6. Y = cdist(XA, XB, «корреляция»)

    Вычисляет корреляционное расстояние между векторами u и v. Это

    \[1 — \frac{(u — \bar{u}) \cdot (v — \bar{v})} {{\|(u — \bar{u})\|}_2 {\|(v — \bar{v})\|}_2}\]

    , где \(\bar{v}\) — среднее значение элементов вектора v, и \(x \cdot y\) является скалярным произведением \(x\) и \(y\).

  7. Y = cdist(XA, XB, 'Хэмминг')

    Вычисляет нормализованное расстояние Хэмминга или пропорцию эти элементы вектора между двумя n-векторами u и v что не согласен. Для экономии памяти матрица X может быть типа логический.

  8. Y = cdist(XA, XB, 'жаккард')

    Вычисляет расстояние Жаккара между точками. Учитывая два векторов, u и v , расстояние Жаккара равно доля тех элементов u[i] и v[i] , что не согласен, где хотя бы один из них отличен от нуля.

  9. Y = cdist(XA, XB, 'дженсеншаннон')

    Вычисляет расстояние Дженсена-Шеннона между двумя массивами вероятностей. Учитывая два вектора вероятности, \(p\) и \(q\), Расстояние Дженсена-Шеннона равно 9.0005

    \[\sqrt{\frac{D(p\параллельный m) + D(q\параллельный m)}{2}}\]

    , где \(m\) — среднее поточечное между \(p\) и \(q\) а \(D\) — дивергенция Кульбака — Лейблера.

  10. Y = cdist(XA, XB, "чебышев")

    Вычисляет расстояние Чебышева между точками. Расстояние Чебышева между двумя n-векторами и и и равно максимальное расстояние по норме-1 между их соответствующими элементами. Более точно, расстояние равно

    \[d(u,v) = \max_i {|u_i-v_i|}.\]

  11. Y = cdist(XA, XB, 'канберра')

    Вычисляет канберрское расстояние между точками. Расстояние в Канберре между двумя точками и и и равно

    .

    \[d(u,v) = \sum_i \frac{|u_i-v_i|} {|u_i|+|v_i|}. \]

  12. Y = cdist(XA, XB, 'брейкертис')

    Вычисляет расстояние Брея-Кертиса между точками. Расстояние Брея-Кертиса между двумя точками 9T}\) где \((1/V)\) ( VI переменная) — обратная ковариация. Если VI не None, VI будет использоваться как обратная ковариационная матрица.

  13. Y = cdist(XA, XB, 'юл')

    Вычисляет Йольское расстояние между логическими векторы. (см. документацию по функциям yule )

  14. Y = cdist(XA, XB, «совпадение»)

    Синоним слова «хамминг».

  15. Y = cdist(XA, XB, 'кости')

    Вычисляет расстояние Dice между булевыми векторами. (видеть кости документация по функциям)

  16. Y = cdist(XA, XB, 'Кульчинский1')

    Вычисляет расстояние по Кульчинскому между логическими векторы. (см. документацию по функциям kulczynski1 )

  17. Y = cdist(XA, XB, 'Рогерстанимото')

    Вычисляет расстояние Роджерса-Танимото между логическими векторы. (см. rogerstanimoto документация по функциям)

  18. Y = cdist(XA, XB, 'расселрао')

    Вычисляет расстояние Рассела-Рао между логическими векторы. (см. документацию по функциям russellrao )

  19. Y = cdist(XA, XB, 'сокалмиченер')

    Вычисляет расстояние Сокаля-Михенера между логическими векторы. (см. функциональную документацию sokalmichener )

  20. Y = cdist(XA, XB, 'sokalsneath')

    Вычисляет расстояние Сокала-Снита между векторами. (видеть sokalsneath документация по функциям)

  21. Y = cрасст(XA, XB, f)

    Вычисляет расстояние между всеми парами векторов в X используя предоставленную пользователем функцию 2-арности f. Например, Евклидово расстояние между векторами можно вычислить следующим образом:

     dm = cdist(XA, XB, lambda u, v: np.sqrt(((u-v)**2).sum()))
     

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

     dm = cdist(XA, XB, sokalsneath)
     

    будет вычислять попарные расстояния между векторами в X с использованием функции Python sokalsneath . Это приведет к sokalsneath вызывается \({n \choose 2}\) раз, что неэффективен. Вместо этого оптимизированная версия C более эффективным, и мы вызываем его, используя следующий синтаксис:

     dm = cdist(XA, XB, 'sokalsneath')
     

Примеры

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

 >>> из scipy.spatial расстояние импорта
>>> координаты = [(35.0456, -85.2672),
... (35.1174, -89.9711),
... (35,9728, -83,9422),
... (36.1667, -86.7833)]
>>> Distance.cdist(координаты, координаты, 'евклидово')
массив([[ 0. , 4,7044, 1,6172, 1,8856],
       [ 4,7044, 0, , 6,0893, 3,3561],
       [ 1,6172, 6,0893, 0. , 2,8477],
       [ 1,8856, 3,3561, 2,8477, 0. ]])
 

Найдите манхэттенское расстояние от трехмерной точки до углов объекта куб:

 >>> a = np. array([[0, 0, 0],
... [0, 0, 1],
... [0, 1, 0],
... [0, 1, 1],
... [1, 0, 0],
... [1, 0, 1],
... [1, 1, 0],
... [1, 1, 1]])
>>> b = np.array([[ 0,1, 0,2, 0,4]])
>>> Distance.cdist(a, b, 'городской квартал')
массив([[ 0,7],
       [ 0,9],
       [1.3],
       [ 1,5],
       [ 1,5],
       [1,7],
       [ 2.1],
       [ 2.3]])
 

5.3.1: Расстояние между точкой и плоскостью

  1. Последнее обновление
  2. Сохранить как PDF
  • Идентификатор страницы
    14667
  • Расстояние между точкой и плоскостью

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

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

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


    Расстояние между точкой и плоскостью

    Определение точки, ближайшей к началу координат

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

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

    Двугранный угол

    Угол между двумя плоскостями называется двугранным углом . Угол между двумя плоскостями равен углу между их векторами нормали. Если мы хотим определить двугранный угол между двумя плоскостями, мы идентифицируем векторы нормалей к двум плоскостям, тогда мы можем использовать скалярное произведение двух векторов нормалей, чтобы определить угол между двумя нормалями, который также является двумя плоскостями. Напомним \(\ \vec{A} \times \vec{B}=|\vec{A}||\vec{B}| \cos \theta\).


    Примеры

    Пример 1

    Три точки \(\ P=(3,7,2), Q=(1,4,3)\) и \(\ R=(2 ,3,4)\) определяют плоскость. Определить точку на плоскости, ближайшую к началу координат.

    Решение

    Сначала найдите векторы между двумя парами точек.

    \(\ \begin{array}{l}
    \overrightarrow{P Q}=\left\langle\left(Q_{x}-P_{x}\right),\left(Q_{y}-P_{ y}\right),\left(Q_{z}-P_{z}\right)\right\rangle=\langle(1-3),(4-7),(3-2)\rangle=\langle -2,-3,1\угол\
    \overrightarrow{PR}=\left\langle\left(R_{x}-P_{x}\right),\left(R_{y}-P_{y}\right),\left(R_{z} -P_{z}\right)\right\rangle=\langle(2-3),(3-7),(4-2)\rangle=\langle-1,-4,2\rangle
    \end{ array}\)

    Произведение этих двух векторов перпендикулярно плоскости.

    \(\ \begin{array}{l}
    \overrightarrow{P Q} \times \overrightarrow{PR}=\left\langle\left(P Q_{y} P R_{z}-P Q_{z} P R_{y}\right),\left(P Q_{z} P R_{x}-P Q_{x} P R_{z}\right),\left(P Q_{x} P R_{y} -P Q_{y} P R_{x}\right)\right\rangle \\
    \overrightarrow{P Q} \times \overrightarrow{P R}=\langle[(-3 \cdot 2)-(1 \cdot-4)],[(1 \cdot-1)-(-2 \cdot 2) ],[(-2 \cdot-4)-(-1 \cdot-3)]\rangle \\
    \vec{n}=\overrightarrow{P Q} \times \overrightarrow{P R}=\langle[(- 6)-(-4)],[(-1)-(-4)],[(8)-(3)]\rangle=\langle-2,3,5\rangle
    \end{массив}\ )

    Точку на плоскости, ближайшую к началу координат, можно найти, определив проекцию вектора положения любой из этих трех точек на вектор нормали. Помните, что векторная проекция одного вектора на направление другого задается скалярным произведением первого вектора на единичный вектор, определяющий направление второго вектора: \(\ (\vec{A} \times \vec {B}) \vec{B}\). 9{2}}}=\frac{\langle-2,3,5\rangle}{\sqrt{38}}=\langle-0.32,0.49,0. 81\rangle \\
    \vec{P} \times\hat {n}=P_{x} \шляпа{n}_{x}+P_{y} \шляпа{n}_{y}+P_{z} \шляпа{n}_{z}=(3)( -0,32)+(7)(0,49)+(2)(0,81)= \\
    -0,96+3,43+1,62=4,09 \\
    (\vec{P} \times \шляпа{n}) \шляпа{n }=(4.09)\langle-0.32,0.49,0.81\rangle=\langle-1.3088,2.0041,3.3129\rangle
    \end{массив}\)

    Следовательно, ближайшая к началу координат точка на плоскости (- 1,3088, 2,0041, 3,3129).

    Пример 2

    Три точки \(\ P=(3,7,2), Q=(1,4,3)\) и \(\ R=(2,3,4)\) определяют самолет. Определите двугранный угол между этой плоскостью и плоскостью x-y.

    Решение

    Как мы видели в примере выше, эти три точки определяют плоскость с вектором нормали \(\ \vec{n}=\langle-2,3,5\rangle\)

    нормаль к плоскости xy представляет собой единичный вектор \(\ \hat{z}=\langle 0,0,1\rangle\). Чтобы найти угол между этими двумя векторами, мы используем тот факт, что \(\ \vec{A} \times \vec{B}=|\vec{A}||\vec{B}|\) и что \(\ \vec{A} \times \vec{B}=A_{x} B_{x}+A_{y} B_{y}+A_{z} B_{z}\)

    Сначала найдите числовое значение для скалярный продукт: 9{\ circ}
    \ end {Array} \)

    Пример 3

    Определите дихедральный угол между двумя плоскостями 12 x + 23 y + 14 0007 Z — 5 = 00008 + 140007 Z — 00007 y + 14 0007 . 7 x + 3 y + z + 12 = 0.

    Решение

    Этот угол также равен углу между нормалями к двум плоскостям. В двух предыдущих задачах мы определили единичные векторы, перпендикулярные этим двум плоскостям \(\ \overrightarrow{n_{1}}=\left\langle\frac{12}{29.5}, \frac{23}{29.5}, \frac{14}{29.5}\right\rangle\) и \(\ \overrightarrow{n_{2}}=\left\langle\frac{7}{ \sqrt{59}}, \frac{3}{\sqrt{59}}, \frac{1}{\sqrt{59}},\right\rangle\). Затем мы можем использовать скалярное произведение этих двух векторов нормалей, чтобы определить угол между ними. Скалярное произведение определяется как \(\ \vec{A} \times \vec{B}=A_{x} B_{x}+A_{y} B_{y}+A_{z} B_{z}+ \ldots\) и как \(\ \vec{A} \times \vec{B}=|A||B| \cos \theta\). Во-первых, нам нужно найти компонентную версию скалярного произведения и величины двух векторов нормалей.

    \(\ \begin{array}{l}
    \overrightarrow{n_{1}} \times \overrightarrow{n_{2}}=\overrightarrow{n_{1 x} n_{2 x}}+\overrightarrow {n_{1 y} n_{2 y}}+\overrightarrow{n_{1 z} n_{2 z}}=\frac{12 \cdot 7}{29,5 \sqrt{59}}+\frac{23 \ cdot 3}{29 \cdot 5 \sqrt{59}}+\frac{14 \cdot 1}{29,5 \sqrt{59}} \\
    \overrightarrow{n_{1}} \times \overrightarrow{n_{2 }}=\frac{12 \cdot 7}{29,5 \sqrt{59}}+\frac{23 \cdot 3}{29,5 \sqrt{59}}+\frac{14 \cdot 1}{29,5 \sqrt{ 59}}=\frac{119}{226,6}+\frac{69}{226,6}+\frac{14}{226,6}=\frac{202}{226,6}=0,89{\circ}
    \end{array}\)

    Пример 4

    Определить угол между плоскостью 2 x — 5 y + 8 — 907 08 08 0 и

    7 0 —

    z самолет.

    Решение

    Двугранный угол определяется как угол между двумя плоскостями, а также равен углу между двумя единичными векторами нормали. В этом случае мы уже знаем единичный вектор нормали для плоскости y-z, \(\ \hat{x}=\langle 1,0,0\rangle\). Однако нам еще нужно определить единичный вектор для плоскости 2 9{2}}}=\frac{\langle 2,-5,8\rangle}{\sqrt{4+25+64}}=\frac{\langle 2,-5,8\rangle}{9,64} = \left\langle\frac{2}{9.64}, \frac{-5}{9.64}, \frac{8}{9.64}\right\rangle\)

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

    Затем мы можем использовать скалярное произведение этих двух векторов нормалей, чтобы определить угол между ними. Скалярное произведение определяется как \(\ \vec{A} \times \vec{B}=A_{x} B_{x}+A_{y} B_{y}+A_{z} B_{z}+ \ldots\) и как \(\ \vec{A} \times \vec{B}=|A||B| \cos \theta\). Во-первых, нам нужно найти компонентную версию скалярного произведения и величины двух векторов нормалей.

    \(\ \overrightarrow{n_{1}} \times \overrightarrow{n_{2}}=\overrightarrow{n_{1 x}} \overrightarrow {n_{2 x}}+\overrightarrow{n_{1 y }} \overrightarrow{n_{2 y}}+\overrightarrow{n_{1 z}}\overrightarrow {n_{2 z}}=\frac{2 \cdot 1}{9,64}+\frac{-5 \cdot 0}{9,64}+\frac{8 \cdot 0}{9,64}=\frac{2}{9,64}=0,2074\)

    Поскольку эти два вектора являются единичными, их величины равны 1,

    .

    \(\ \begin{array}{l}
    \cos \theta=\frac{\overrightarrow{n_{1}} \times \overrightarrow{n_{2}}}{\left|\overrightarrow{n_{1 }}\right|\left|\overrightarrow{n_{2}}\right|}=\frac{0,2074}{(1)(1)}=0,2074 \\ 9{\circ}
    \end{array}\)

    Пример 5

    Три точки \(\ \vec{P}=\langle-2,3,4\rangle, \vec{Q}=\langle 5 ,-6,7\rangle\) и \(\ \vec{R}=\langle 8,9,-1\rangle\) определяют плоскость. Определить точку на плоскости, ближайшую к началу координат.

    Решение

    Ближайшую к началу координат точку на плоскости можно найти, определив проекцию вектора положения одной из этих трех точек на вектор нормали. Помните, что векторная проекция одного вектора на направление другого задается скалярным произведением первого вектора на единичный вектор, определяющий направление второго вектора: \(\ (\vec{P} \times \hat{ п}) \шляпа{п}\).

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

    \(\ \begin{array}{l}
    \vec{A}=\vec{Q}-\vec{P}=\langle 5,-6,7\ rangle-\langle-2,3,4\rangle=\langle 7,-9,3\rangle \\
    \vec{B}=\vec{R}-\vec{P}=\langle 8,9, -1\rangle-\langle-2,3,4\rangle=\langle 10,6,-5\rangle
    \end{массив}\)

    Теперь определите векторное произведение двух векторов

    \(\ \begin{array}{l}
    \vec{n}=\vec{A} \times \vec{B}=\left\langle\left( A_{y} B_{z}-A_{z} B_{y}\right),\left(A_{z} B_{x}-A_{x} B_{z}\right),\left(A_{ x} B_{y}-A_{y} B_{x}\right)\right\rangle \\
    \vec{n}=\vec{A} \times \vec{B}=\langle(45-18 ),(30-(-35)),(42+90)\rangle \\
    \vec{n}=\vec{A} \times \vec{B}=\langle 27,65,132\rangle
    \end {массив}\)

    Теперь нам нужно определить единичный вектор, связанный с этим вектором нормали 9{2}}}=\frac{\langle 27,65,132\rangle}{\sqrt{22378}} \\
    \шляпа{n}=\frac{\vec{n}}{|\vec{n}| }=\langle 0.181,0.435,0.882\rangle
    \end{array}\)

    Теперь мы определяем векторную прогрессию одного из трех векторов начального положения в направлении этого единичного вектора нормали: \(\ (\ vec{P} \times \hat{n}) \hat{n}\). Помните, что скалярное произведение задается как

    \(\ \begin{array}{l}
    \vec{A} \times \vec{B}=A_{x} B_{x}+A_{y} B_{ y}+A_{z} B_{z}+\ldots \\
    (\vec{P} \times \hat{n}) \hat{n}=(-2(0,181)+3(0,435)+4 (0,882))\угол 0,181,0,435,0,882\угол\
    (\vec{P} \times \шляпа{n}) \шляпа{n}=(4,471)\langle 0,181,0,435,0,882\rangle \\
    (\vec{P} \times \шляпа{n}) \hat{n}=(4.471)\langle 0.181,0.435,0.882\rangle=\langle 0.809,1.945,3.943\rangle
    \end{массив}\)

    Пример 7

    Определение точки на плоскости 7 x + 3 y + z + 12 = 0, что ближе всего к началу координат.

    Решение

    Ближайшую к началу координат точку на плоскости можно найти, определив проекцию вектора положения любой точки на плоскости на вектор нормали. Векторная проекция одного вектора на направление другого задается скалярным произведением первого вектора на единичный вектор, определяющий направление второго вектора: \(\ (\vec{P} \times \hat{n} ) \шляпа{п}\). 9{2}}}=\frac{\langle 7,3,1\rangle}{\sqrt{49+9+1}}=\frac{\langle 7,3,1\rangle}{\sqrt{59} } = \left\langle\frac{7}{\sqrt{59}}, \frac{3}{\sqrt{59}}, \frac{1}{\sqrt{59}}\right\rangle\)

    Нам также нужно знать положение точки на плоскости. Если мы запишем уравнение плоскости в форме точки пересечения, мы сможем определить вектор положения для осей x, y и z плоскости.

    Уравнение \(\ 1=\frac{x}{a}+\frac{y}{b}+\frac{z}{c}\) должно выполняться для всех точек на плоскости. Следовательно, мы должны сначала переставить 7 x +3 y + z + 12 = 0 в виде \(\ 1=\frac{x}{a}+\frac{y}{b}+\frac {г}{с}\).

    \(\ 7 x+3 y+z=-12 \text { становится } \frac{7}{-12} x+\frac{3}{-12} y+\frac{1}{-12} z =1\)

    Следовательно, \(\ a=\frac{-12}{7}, b=\frac{-12}{3}=-4\) и \(\ c=\frac{- 12}{1}=-12\), а векторы положения трех точек пересечения равны \(\ \vec{A}=\langle-1.714,0,0\rangle, \vec{B}=\langle 0,- 4,0\rangle\) и \(\ \vec{C}=\langle 0,0,-12\rangle\).

    Чтобы решить задачу, вычислите скалярное произведение.

    \(\ (\vec{B} \times \шляпа{n}) \шляпа{n}=\left(B_{x} \шляпа{n}_{x}+B_{y} \шляпа{n }_{y}+B_{z} \hat{n}_{z}\right) \hat{n} = \left(0\left(\frac{7}{\sqrt{59}}\right) -4\влево(\frac{3}{\sqrt{59}}\right)+0\влево(\frac{1}{\sqrt{59}}\right)\right)\left\langle\frac{ 7}{\sqrt{59}}, \frac{3}{\sqrt{59}}, \frac{1}{\sqrt{59}}\right\rangle\)

    \(\ (\vec{ B} \times \hat{n}) \hat{n}=\frac{-12}{\sqrt{59}}\left\langle\frac{7}{\sqrt{59}}, \frac{3 }{\sqrt{59}}, \frac{1}{\sqrt{59}}\right\rangle=\left\langle\frac{-84}{59}, \frac{-36}{59}, \frac{-12} {59}\right\rangle=\langle-1.424,-0.610,-0.203\rangle\)


    Обзор

    Три точки определяют плоскость. Определить точку на плоскости, ближайшую к началу координат.

    1. \(\ P=(3,6,9), Q=(9,6,3) \text { и } R=(6,-9,9)\)
    2. \(\ P=(1,-7,2), Q=(4,2,9) \text { и } R=(3,-5,1)\)
    3. \(\ P=(3,8,10), Q=(-2,5,8) \text { и } R=(7,4,8)\)
    4. \(\ P=(9,-1,4), Q=(6,2,-8) \text { и } R=(12,9,10)\)
    5. \(\ P=(5,8,-9), Q=(-5,3,9) \text { и } R=(10,4,-6)\)

    Определите двугранный угол между каждой из плоскостей в вопросах 1-5 и плоскостью x-y. Используйте \(\ |\vec{n}|\), который вы вычислили для каждой плоскости, и вспомните, что нормаль к плоскости xy является единичным вектором \(\ \hat{z}=\langle 0,0,1\rangle \).

    1. \(\ P=(3,6,9), Q=(9,6,3) \text { и } R=(6,-9,9)\)
    2. \(\ P=(1,-7,2), Q=(4,2,9) \text { и } R=(3,-5,1)\)
    3. \(\ P=(3,8,10), Q=(-2,5,8) \text { и } R=(7,4,8)\)
    4. \(\ P=(9,-1,4), Q=(6,2,-8) \text { и } R=(12,9,10)\)
    5. \(\ P=(5,8,-9), Q=(-5,3,9) \text { и } R=(10,4,-6)\)

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

    1. \(\ 9 x+17 y-4 z-7=0 \text { и }-17 x+24 y+14 z+2=0\)
    2. \(\ 2 x-4 y+10 z-11=0 \text { и } 2 x-9 y+4 z+12=0\)
    3. \(\ -7 х+20 у+6 г+4=0 \текст { и }-19х-3 у+г+5=0\)
    4. \(\ 5 x-8 y+20 z-5=0 \text { и } 6 x+y+19 z-7=0\)
    5. \(\ 14 x+11 y-5 z-16=0 \text { и } 11 x-13 y+8 z+4=0\)
    6. \(\ -10 х+9 у+2 г+8=0 \текст { и } 21 х+7 у-4 г+15=0\)

    Обзор (ответы)

    Чтобы просмотреть ответы на обзор, откройте этот PDF-файл и найдите раздел 5. 8.


    Словарь

    Срок Определение
    Двугранный угол Двугранный угол — это угол между двумя плоскостями в трехмерном пространстве.
    Происхождение Начало координат — это точка пересечения осей x и y на декартовой плоскости. Координаты начала координат (0, 0).
    ортогональность Быть ортогональным значит быть перпендикулярным.
    Перпендикулярный Перпендикулярные прямые — это прямые, пересекающиеся под углом 90 o . Произведение наклонов двух перпендикулярных прямых равно -1.
    самолет Плоскость — это плоская двумерная поверхность. Его можно представить как лист бумаги бесконечной площади.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    © 2015 - 2019 Муниципальное казённое общеобразовательное учреждение «Таловская средняя школа»

    Карта сайта