|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.07.2020, 14:06 | #1 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Пересечение луча и квадрата в 3D
Здравствуйте.
До последнего не хотел создавать эту тему. Перекопал кучу сайтов, но не понял что надо делать. Смысл вот в чём. Есть луч и квад в 3D пространстве: Код:
Напишите псевдокод с последовательностью действий. Или хотя-бы просто последовательность действий по пунктам. |
18.07.2020, 21:34 | #2 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,550
|
Нужна конкретизация: луч - это отрезок или бесконечная прямая, включающая этот отрезок ? Метод решения зависит от этого, я думаю.
|
18.07.2020, 22:10 | #3 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
(The AP Professional graphics CD-ROM) Andrew S. Glassner-Graphics Gems. Volume 1-AP Professional (1995)
страницы 385-395 Вот смотри квадрат это плоскость. У тебя есть плоскость она описывается каноническим уравнением (A*X+B*Y+C*Z+D=0) или кратко N*P+D=0 N - нормаль P -множество точек плоскости D- константа кратчайшее расстояние от O(0,0,0) до плоскости. Из своих p1,p2,p3,p4 находишь N и D. Есть луч P=R*t+R0. Из своих rayStart и rayFinish находишь R,R0. Получаем систему N*P+D=0 P=R*t+R0 Вернее 3 однотипных системы для x,y,z. Решаем каждую подситему уравнений находим P. Решать можно методом элементарных вычитаний Гаусса или через детерминанты методом Крамера. После проверяем, что точка P лежит внутри квадрата.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 18.07.2020 в 22:20. |
19.07.2020, 06:42 | #4 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Pavia
Вот опять. Уравнения-уравнения-уравнения. Системы-системы-системы. Это я и так в интернете видел. Но я не понимаю, что с этим делать (потому что я тупой). Напишите чёткую последовательность действий по пунктам (можно даже без формул). Тупой вопрос №1: как можно записать множество точек одной переменной? Это должен быть массив? ну допустим отрезок - от rayStart до rayFinish. Последний раз редактировалось BLACK_RAIN; 19.07.2020 в 06:44. |
19.07.2020, 08:36 | #5 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
|
19.07.2020, 08:40 | #6 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
|
19.07.2020, 09:11 | #7 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
|
19.07.2020, 11:24 | #8 | ||
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Это множество точек луча(прямой).
Цитата:
----------------------------- Параметриское уравнение плоскости N*P+D=0 Найдём параметры. Нормаль вычисляется вот так вот. N=CrossProduct(p2-p1,p4-p1); D=-N*p1; Цитата:
Подставляем ваши значения P=R*t+R0 получаем rayStart==R*0+R0 откуда R0=rayStart; Находим R, будем считать что t=1, P=rayFinish; R=rayFinish-rayStart; Система N*P+D=0 P=R*t+R0 Решаем подставим второе уравнение в первое N*R*t+N*R0+D=0 t=-(N*R0+D)/N*R Полученное t подставляем во второе уравнение P=-R*(N*R0+D)/N*R+D R - сокращается P=-(N*R0+D)/N+D На С++ у вас будет P=-(N*R0+D)/N+D; Код целиком: Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
||
19.07.2020, 12:04 | #9 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Спасибо, попробую. Но я не пойму, почему в конце проверяется два треугольника, если изначально был один квад?
|
19.07.2020, 15:05 | #10 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,063
|
Не пойму, каким боком квадрат до 3D
Если речь о 3D, тогда не квадрат а куб. И у точек вектора куба не две, а три координаты. Пример: p0 = x0, y0, z0; соответственно удаленные от начала координат точки вектора pn = xn, yn, zn.
I am not a wizard, I am just learning.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сделать пересечение луча и модели в OpenGL? | Rasool | Мультимедиа в Delphi | 1 | 28.03.2015 23:07 |
Обрезание луча по границам прямоугольника С# | Weyner | Помощь студентам | 0 | 10.04.2013 17:10 |
Обрезание луча по границам прямоугольника | Weyner | C# (си шарп) | 0 | 10.04.2013 17:00 |
Обратный ход луча по горизонтали 04h | andy301086 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 23.12.2011 12:56 |
Отражение луча | Illusionist | Общие вопросы Delphi | 3 | 30.05.2009 23:20 |