Страница: 1 |
Вопрос: вопрос - как повернуть фигуру вокруг своей оси | Добавлено: 03.04.08 00:21 |
Автор вопроса: ![]() |
есть два массива integer. в одном хранятся координаты точек по оси x, в другом по оси y. точки задают контур фигуры линиями. вопрос - как повернуть фигуру вокруг своей оси на n градусов... причем нужно сохранить центровку фигуры, чтобы она не съехала относительно центра. |
Ответы | Всего ответов: 6 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 03.04.08 01:17 |
с чего это она съедет куда-то? во-первых нужно знать, где у фигуры центр. А дальше проще, синус косинус и всё такое)) Если бы не час ночи, я бы даже подумал над этим, а не спать пошел. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 03.04.08 03:26 |
Вычти вектор из центра, домножь на матрицу вращения, прибавь центр обратно. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 3 Ответов: 5 |
Профиль | Цитата | #3 | Добавлено: 05.04.08 00:31 |
а алго если не сложно
будте добры |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 05.04.08 00:46 |
Алгоритм описан в посте 2. Код я писать не буду. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() 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], ты уже сам начал предпросмотр писать? я ж тебе писал в аську, что займусь, а ты молчишь.... |
Страница: 1 |
|