Страница: 1 |
Страница: 1 |
Вопрос: вопрос - как повернуть фигуру вокруг своей оси
Добавлено: 03.04.08 00:21
Автор вопроса: [MDinc]
есть два массива integer. в одном хранятся координаты точек по оси x, в другом по оси y. точки задают контур фигуры линиями. вопрос - как повернуть фигуру вокруг своей оси на n градусов... причем нужно сохранить центровку фигуры, чтобы она не съехала относительно центра.
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #1
Добавлено: 03.04.08 01:17
с чего это она съедет куда-то? во-первых нужно знать, где у фигуры центр. А дальше проще, синус косинус и всё такое)) Если бы не час ночи, я бы даже подумал над этим, а не спать пошел.
Номер ответа: 2
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #2
Добавлено: 03.04.08 03:26
Вычти вектор из центра, домножь на матрицу вращения, прибавь центр обратно.
Номер ответа: 3
Автор ответа:
[MDinc]
Вопросов: 3
Ответов: 5
Профиль | | #3
Добавлено: 05.04.08 00:31
а алго если не сложно
будте добры
Номер ответа: 4
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #4
Добавлено: 05.04.08 00:46
Алгоритм описан в посте 2. Код я писать не буду.
Номер ответа: 5
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #5
Добавлено: 09.04.08 18:33
Ну, просто ведь все:
0. cX, cY — координаты центра картинки, alpha — угол поворота.
1. Берем 2 одинаковых поля, в первое загружаем картинку, оба поля размером с нее.
2. Второе поле растягиваем, по горизонтали на Math.Cos(2 * alpha), по вертикали — на синус.
3. На первом поле обходим каждый пиксель с координатами (X, Y) циклами For..Next, рисуем его на второе поле с координатами
( Dist(X, Y, cX, cY) * Math.Cos(alpha + ABTP(X, Y, cX, cY)) , Dist(X, Y, cX, cY) * Math.Sin(alpha + ABTP(X, Y, cX, cY)) )
4. Создаешь функцию ABTP [Angle Between Two Points), в ней по арктангенсу от частного координат находишь угол между 2мя точками.
5. Готово.
6. Если нужно сглаживание, используй либо пост-обработку с предваретельным занесением в массив, либо GDI+.
Номер ответа: 6
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #6
Добавлено: 09.04.08 23:31
[MDinc], ты уже сам начал предпросмотр писать? я ж тебе писал в аську, что займусь, а ты молчишь....