![]() |
|
|
![]()
|
|
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Попробую сегодня закончить, а то вчера времени опять не хватило
Итак. Косинус угола между векторами 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 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: нет Всего: 232 |
спасибо
-------------------- ![]() |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |