Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Углы, координаты, Нужна помощь 
:(
    Опции темы
Чих_и_Пых_Пых(MySql_and_PHP)
Дата 16.6.2005, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 20.4.2005

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



Помогите, пожалуйста.
Нужна следующая функция:
Дано: четыре координаты четырёхугольника, угол поворота.
На выходе: четыре координаты повёрнтого четырёхугольника.

Спасибо.
Добавлено @ 18:19
Интересно, я не регистрировался, а имя форум мне сам присвоил что ли?
PM MAIL   Вверх
DENNN
Дата 16.6.2005, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
ано: четыре координаты четырёхугольника, угол поворота.

Поворачивать как будем? Относительно какой точки?
PM ICQ   Вверх
Guest
Дата 16.6.2005, 19:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здесь самое правильное (сам программировал геометрию) расчитать матрицу оператора поворота. Тебе даны точки (по три координаты) и точка, вокруг которой поворачивать. Сначала каждой точке сопоставляешь радус-вектора (от точки поворота к точке, которую вертеть).

Теперь тебе могут быть заданы углы. Углы вращения надо задать вокруг осей, совпадающих с векторами базиса, перенесенными в точку вращения ( вектора базиса - это те, через которые ты выразил координаты радиус-векторов). Скорее всего i, j и k :-) .

Теперь так. Если ось вращения x (т.е. через вектор i). То свои вектора ты домножаешь на следующую матрицу:
| 1 0 0 |
| 0 cos f sin f |
| 0 sin f cos f |

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

Можно на листочке перемножить две такие матрицы (с двумя разными углами) и получить конечную матрицу.

Вот примерно в таком духе и удобно работать с вращениями. Если у тебя двухмерное пространство, то все еще проще :-) .
  Вверх
comcon1
Дата 16.6.2005, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

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



Извините, забыл. Зарегистрироваться. Это я. Пробуй, считай smile


--------------------
PM MAIL   Вверх
cardinal
Дата 16.6.2005, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

Репутация: 5
Всего: 99



Я вот тута поворатами точек занимался, почитайте...
http://forum.vingrad.ru/index.php?showtopic=22163


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
DENNN
Дата 17.6.2005, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(cardinal @ 16.6.2005, 20:13)
Я вот тута поворатами точек занимался, почитайте...
http://forum.vingrad.ru/index.php?showtopic=22163

Ага, не лишне только добавить, что порядок поворота вокруг осей важен. Сменишь порядок - получишь совершенно другое решение smile
PM ICQ   Вверх
Guest
Дата 27.6.2005, 15:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











а кто-нибудь может выложить готовую функцию типа (на Delphi например)

type
TPoints: array[0..3] of TPoint;

function Rotate (Source: TPoints; Angle: Integer): TPoint;
var
...
begin
...
end;
  Вверх
cardinal
Дата 27.6.2005, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

Репутация: 5
Всего: 99



Вот например VB...
Код

**************************************************************************'
' simple rotation around Z axis

Public Function RotateZ(point As Point3D, _
                        center As Point3D, _
                        Angle As Double _
                        ) As Point3D
Dim newpoint As Point3D
Angle = Angle * PI / 180
point.X = point.X - center.X
point.Y = point.Y - center.Y
point.Z = point.Z - center.Z

newpoint.X = point.X * Cos(Angle) - point.Y * Sin(Angle)
newpoint.Y = point.X * Sin(Angle) + point.Y * Cos(Angle)

newpoint.X = newpoint.X + center.X
newpoint.Y = newpoint.Y + center.Y
newpoint.Z = newpoint.Z + center.Z
RotateZ = newpoint
End Function



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
yaja
Дата 27.6.2005, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 30.3.2005
Где: Санкт-Петербург

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



Цитата(Guest @ 16.6.2005, 19:49)
| 1 0 0 |
| 0 cos f sin f |
| 0 sin f cos f |

Наверное, матрица поворота следующая
| 1 0 0 |
| 0 cos f -sin f |
| 0 sin f cos f |
(во всяком случае для плоскости она точно
| cos -sin|
| sin cos|)
Код cardinal только подтверждает это smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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