Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: вопрос - как повернуть фигуру вокруг своей оси Добавлено: 03.04.08 00:21  

Автор вопроса:  [MDinc]
есть два массива integer. в одном хранятся координаты точек по оси x, в другом по оси y. точки задают контур фигуры линиями. вопрос - как повернуть фигуру вокруг своей оси на n градусов... причем нужно сохранить центровку фигуры, чтобы она не съехала относительно центра.

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #1
Добавлено: 03.04.08 01:17
с чего это она съедет куда-то? во-первых нужно знать, где у фигуры центр. А дальше проще, синус косинус и всё такое)) Если бы не час ночи, я бы даже подумал над этим, а не спать пошел.

Ответить

Номер ответа: 2
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #2
Добавлено: 03.04.08 03:26
Вычти вектор из центра, домножь на матрицу вращения, прибавь центр обратно.

Ответить

Номер ответа: 3
Автор ответа:
 [MDinc]



Вопросов: 3
Ответов: 5
 Профиль | | #3 Добавлено: 05.04.08 00:31
а алго если не сложно
будте добры

Ответить

Номер ответа: 4
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #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-сайт: domkratt.com
 Профиль | | #6
Добавлено: 09.04.08 23:31
[MDinc], ты уже сам начал предпросмотр писать? я ж тебе писал в аську, что займусь, а ты молчишь....

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам