Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отсечение части куба 
:(
    Опции темы
DENNN
Дата 3.11.2005, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Попробую сегодня закончить, а то вчера времени опять не хватило smile

Итак. Косинус угола между векторами R1 и R2, если мне не изменяет мой склероз, будет

cos = (x1*x2 + y1*y2) / sqrt ((x1*x1 + y1*y1) * (x2*x2 + y2*y2))

Т.е. если косинус задан направлением С, и требуется найти угол, между гранью куба Q и плоскостью сечения, перпендикулярного оси цилиндра и проходящего через точку пересечения этой оси с гранью, то угол между нормалью грани QN и этой плоскостью будет
cos = (QNx*Сx + QNy*Сy) / sqrt ((QNx*QNx + QNy*QNy) * (Сx*Сx + Сy*Сy))

А угол между гранью и плосокстью

alfa=PI/2 - arccos( (QNx*Сx + QNy*Сy) / sqrt ((QNx*QNx + QNy*QNy) * (Сx*Сx + Сy*Сy)) )

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

r= tan(w)*CS

Таким образом, как видно из второго рисунка, необходимо для всех положений радиуса r найти координаты проекции его вершины на грань куба. Удобно ввести еще одну систему координат, с центром в точке пересечения оси цилиндра с гранью. Пусть ось X' направленна по радиусу окружности, когда он совпадает с плоскостью грани куба, ось Y' лежит в плосксоти грани куба. Учитывая, что стороны куба палаллельны осям координат, при переходе от новой системы координат к исходной Z всегда будет постоянна.
Итак, в новой введенной системе координат для положения вектора r, образующего с нашей осью X' угол beta координат спроектрованной вершины на плоскость грани вычисляются следующим образом :

x'=- (r*cos(beta));
y'=r*sin(beta)*cos(alfa);

У меня на рисунке "нулевой" угол бета направлен в противопложную от оси X' сторону, т.е. для beta=0 вектор r направлен в противопложную относительно OX' сторону. Поэтому я поставил знак минус в первой формуле.

Для перехода от нашей локальной Ск к заданной в задаче необходимо прибывить поправки в координаты получаемых точек. К примеру, если координаты точки пересечения оси с гранью равны (Ox,Oy,Oz), то координаты искомых точек будут равны
x=x'+Ox=- (r*cos(beta))+Ox;
y=y'+Oy=r*sin(beta)*cos(alfa)+Oy;
z=Oz;

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

Может чего перепутал - поправляйте. Главное, чтоб ход мысли был понятен.

Это сообщение отредактировал(а) DENNN - 3.11.2005, 09:21
PM ICQ   Вверх
mr.DUDA
Дата 4.11.2005, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: нет
Всего: 232



спасибо


--------------------
user posted image
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0462 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.