Форум программистов, компьютерный форум, киберфорум
Геометрия
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
6 / 6 / 3
Регистрация: 17.04.2014
Сообщений: 156
1

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

12.08.2018, 10:39. Просмотров 1793. Ответов 3

У меня есть вектор dir, заданный через x,y,z.
Есть плоскость, которая описана тремя точками {vert0, vert1, vert2}. Т.е. описана треугольником, которая лежит на плоскости.
Мне нужно найти вектор, который получиться при отражении dir от плоскости.

Думаю найти вектор так:
1) получить нормаль к плоскости {vert0,vert1,vert2};
2) получить проекцию dir на нормаль
3) удвоить полученный вектор
4) отнять полученный от исходного вектор dir.

Нормаль я нахожу так:
Сначала получаю два вектора, которые лежат на плоскости:
v0 = vert1-vert0
v1 = vert2-vert0
После вычисляю векторное произведение v0 и v1:
X = v0.Y * v1.Z - v0.Z * v1.Y
Y = v0.Z * v1.X - v0.X * v1.Z
Z = v0.X * v1.Y - v0.Y * v1.X

Теперь мне нужно получить проекцию на эту нормаль, но у меня не получается. Пробовал разные способы, с нормализацией векторов и без. Но что то я делаю не так, видимо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2018, 10:39
Ответы с готовыми решениями:

Найти уравнение отражения относительно плоскости
Помогите пожалуйста в решении следующих уравнений 1) Найти уравнение отражения относительно...

Получить атрибут техникой отражения
Имеется класс, в котором есть метод. Для класса определен атрибут RemarkAttribute, для метода -...

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

Получить элементы квадратной матрицы. Сформировать из матрицы А вектор. Используя вектор Х получить значение п
Нет времени переписать задание в текстовыв вид, чуть позже смогу. Подскажите, как сделать данное...

3
567 / 375 / 16
Регистрация: 05.07.2018
Сообщений: 1,398
Записей в блоге: 7
12.08.2018, 14:18 2
Lagilo.
я не понял, зачем вам проекция вашего вектора на нормаль к плоскости? Лично я мыслю так.
1. получить нормаль к плоскости и (естественно) точку пересечения нормали и плоскости
2. ваш вектор, нормаль и искомый вектор должны лежать в одной плоскости,
то есть смешанное произведение этих векторов должно равно 0
и последнее длина искомого вектора должна равняться длине исходного вектора
кажется так...
0
Модератор
Эксперт по математике/физике
6251 / 3986 / 1479
Регистрация: 09.10.2009
Сообщений: 7,449
Записей в блоге: 4
12.08.2018, 18:05 3
Цитата Сообщение от Lagilo Посмотреть сообщение
Думаю найти вектор так:
Алгоритм правильный, за исключением пункта 2): проекция вектора на вектор это число, а вам нужен вектор.
Формула такая:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\bar{d}_1=\bar{d}-2\frac{\left( \bar{d},\bar{v}_0,\bar{v}_1\right) \cdot \left[\bar{v}_0,\bar{v}_1 \right]}{\left|\left[\bar{v}_0,\bar{v}_1 \right] \right|^2}
https://www.cyberforum.ru/cgi-bin/latex.cgi?\left( \bar{d},\bar{v}_0,\bar{v}_1\right)\equiv \left(\bar{d},\left[\bar{v}_0,\bar{v}_1 \right] \right) - это смешанное произведение трёх векторов, равно скалярному произведению данного вектора d на векторное произведение (т.е. на нормаль к плоскости).
Цитата Сообщение от нтч Посмотреть сообщение
то есть смешанное произведение этих векторов должно равно 0
и последнее длина искомого вектора должна равняться длине исходного вектора
Т.е. вы предлагаете записать систему? Которую ещё нужно решать как-то.
1
6 / 6 / 3
Регистрация: 17.04.2014
Сообщений: 156
13.08.2018, 07:55  [ТС] 4
Спасибо)) Решил еще вчера, но не написал ответ.

Приведу пример на C#.
Получилось так:
[
Кликните здесь для просмотра всего текста
CSHARP]
public static Vector3 GetReflectedVector(Vector3 direction,Vector3 vert0, Vector3 vert1, Vector3 vert2)
{
Vector3 normalizeDirection = Normalize(direction);

Vector3 planeNormal = Normalize(Cross(vert1 - vert0, vert0 - vert2));

return CombineVector(normalizeDirection, planeNormal, 1, (float)(-2 * Dot(normalizeDirection, planeNormal)));
}

private static Vector3 CombineVector(Vector3 v1, Vector3 v2, float f1, float f2)
{
Vector3 vector3;

vector3.X = (f1 * v1.X) + (f2 * v2.X);
vector3.Y = (f1 * v1.Y) + (f2 * v2.Y);
vector3.Z = (f1 * v1.Z) + (f2 * v2.Z);

return vector3;
}
[/CSHARP]
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2018, 07:55

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

Есть квадратная матрица А порядка n и вектор b с n элементами. Получить вектор Аb.
Привет. Не могу разобратся, вот задание: Есть квадратная матрица А порядка n и вектор b с n...

Даны квадратная матрица A порядка n и вектор b c n элементами. Получить вектор: A^2b
Даны квадратная матрица A порядка n и вектор b c n элементами. Получить вектор: A^2b. Помогите...

Получить вектор Ab, где b - вектор, элементы которого вычисляются по формуле
Дана квадратная матрица A порядка n, и вектор b с n элементами. Получить вектор Ab, где b - вектор,...

Найти максимальное значение в каждой строке. Из этих значений получить вектор из 5-ти элементов. Выдать матрицу А и вектор В.
Дана матрица A (5x4). Заполнить ее значениями вещественного типа. Найти максимальное значение в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.