Как найти координаты трехмерных точек в перпендикулярной плоскости к заданному вектору - PullRequest
0 голосов
/ 29 января 2019

У меня есть две точки в трехмерном пространстве, одна точка (x, 0, z), а другая - начало координат (0,0,0), через эти точки проходит линия с длиной L, которая равнаначиная с первой точки и продолжая после начальной точки, в конце этой линии расположена перпендикулярная (к линии) плоская доска с размерами W x H, линия заканчивается в середине этой доски.

Предположим, что даны x, z, L, H, W, мне нужен способ найти все координаты трехмерных точек, где эти точки образуют пиксельное изображение над доской (то есть каждая точка имеет расстояние 1 слева от нее,справа, сверху, снизу соседние точки).

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

Спасибо.

ugly_drawing

1 Ответ

0 голосов
/ 29 января 2019

Возможно определить эту плоскость.Но нет выбранного направления для построения сетки уникально.

Пусть мы выберем направление OY в качестве основы (потому что нормаль имеет нулевую Y-компоненту).

Итак, мы имеем:

Нормальный вектор N = (xx, 0, zz) // Я переименовал значения, чтобы избежать путаницы с координатными переменными

Единица нормального вектора n = (nx, 0, nz), где

 nx = xx / Sqrt(xx*xx+zz*zz)
 nz = zz / Sqrt(xx*xx+zz*zz)

Базовая точка

B = (bx, 0, bz) =  (xx - nx * L, 0, zz - nz * L)

Единичный базовый вектор в плоскости

dy = (0, 1, 0)

Другой базовый вектор

dc = dy x n  //vector product
   = (-bz, 0, bx)

Теперь можно генерировать сетку, используя целочисленные индексы i, j в диапазонах (-W/2..W/2) и (-H/2.. H/2).Координаты узлов сетки:

  x(i, j) = bx - j * bz
  y(i, j) = 0 + i 
  z(i, j) = bz + j * bx
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...