forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Поворот массива точек (http://forum.boolean.name/showthread.php?t=6806)

SBJoker 07.10.2008 18:24

Поворот массива точек
 
В принципе я понимаю, что задачка несложная, тут весь вопрос в методе и его красоте/скорости.

Дано: массив точек вида (х, y) расположеных в плоских координатах на плоскости.

Задача: повернуть всю систему вокруг любой выбраной из массива наобум точки.
Дополнительно: определить угол поворота всей плоскости относительно любой другой точки.

У кого какие мысли?

zheland 07.10.2008 18:51

Ответ: Поворот массива точек
 
Подвинуть матрицу на позицию осевой точки.
(Что-бы выбранная точка была в центре)
Повернуть матрицу.
Подвинуть матрицу обратно.

Первое, что в голову пришло. :)

SBJoker 07.10.2008 19:39

Ответ: Поворот массива точек
 
Мне кажется в этом случае результат будет неточным

Tadeus 07.10.2008 19:46

Ответ: Поворот массива точек
 
Цитата:

Сообщение от SBJoker (Сообщение 88089)
Мне кажется в этом случае результат будет неточным

Когда я смотрю на свиборга, мне кажется, что он смотрит на меня, как на дерьмо!

Сори, не удержался :lol:

impersonalis 07.10.2008 21:14

Ответ: Поворот массива точек
 
Чо-то кроме банальных тригнометрчиеских операций на ум ничего не идёт =\

dimanche13 08.10.2008 10:13

Ответ: Поворот массива точек
 
грабануть картинку, и поставив хендл в нужную точку, повернуть

zheland 08.10.2008 15:39

Ответ: Поворот массива точек
 
Цитата:

грабануть картинку, и поставив хендл в нужную точку, повернуть
Очень медленно; не точно.

SBJoker 08.10.2008 15:46

Ответ: Поворот массива точек
 
Товарищи в условии про картинку ничо несказано.

HolyDel 08.10.2008 15:58

Ответ: Поворот массива точек
 
SBJoker, вот, набросал пример:
http://www.forum.likosoft.ru/showthr...=newpost&t=321

1000 точек поворачивается быстро.
управление - навести на точку, зажать ЛКМ и возить мыша влево-вправо.

SBJoker 08.10.2008 17:44

Ответ: Поворот массива точек
 
Отлично. Надо придумать ещё что-нибудь занимательное..

zheland 08.10.2008 19:00

Ответ: Поворот массива точек
 
1)Удивительно: только-что проверил:
Код:

(x1-x2)*(x1-x2)
100 точек: время поворота на 360 градусов: 6037
быстрее чем:
Код:

(x1-x2)^2
100 точек: время поворота на 360 градусов: 6054

2)Вроде можно вычислить косинус из готового синуса угла быстрее,
чем вычислять новый.

HolyDel 08.10.2008 19:06

Ответ: Поворот массива точек
 
drunnik, мсье маньяк?
увеличение скорсти на 0.28 процента вполне укладывается в погрешность.

zheland 08.10.2008 19:30

Ответ: Поворот массива точек
 
А проверял раз 5:
В первом варианте было всегда 6037(один раз было 6036);
А во втором всегда 6054.
Это скорее не погрешность.

SBJoker 08.10.2008 19:48

Ответ: Поворот массива точек
 
Цитата:

Сообщение от drunnik (Сообщение 88261)
2)Вроде можно вычислить косинус из готового синуса угла быстрее,
чем вычислять новый.

Неверно, на современном этапе развития процессор вычисляя Синус и Косинус тратит времени меньше чем тратится при доступе к памяти чтобы прочитать готовое значение.

jimon 08.10.2008 20:38

Ответ: Поворот массива точек
 
SBJoker
а cos и sin одного угла можно вообще одной операцией посчитать

Код:

inline void jeSinCos(float Angle,float & SinValue,float & CosValue )
{
__asm
{
fld Angle;
fsincos;
mov eax,[CosValue];
fstp [eax];
mov eax,[SinValue];
fstp [eax];
}
}



Часовой пояс GMT +4, время: 18:10.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot