![]() |
Поворот массива точек
В принципе я понимаю, что задачка несложная, тут весь вопрос в методе и его красоте/скорости.
Дано: массив точек вида (х, y) расположеных в плоских координатах на плоскости. Задача: повернуть всю систему вокруг любой выбраной из массива наобум точки. Дополнительно: определить угол поворота всей плоскости относительно любой другой точки. У кого какие мысли? |
Ответ: Поворот массива точек
Подвинуть матрицу на позицию осевой точки.
(Что-бы выбранная точка была в центре) Повернуть матрицу. Подвинуть матрицу обратно. Первое, что в голову пришло. :) |
Ответ: Поворот массива точек
Мне кажется в этом случае результат будет неточным
|
Ответ: Поворот массива точек
Цитата:
![]() Сори, не удержался :lol: |
Ответ: Поворот массива точек
Чо-то кроме банальных тригнометрчиеских операций на ум ничего не идёт =\
|
Ответ: Поворот массива точек
грабануть картинку, и поставив хендл в нужную точку, повернуть
|
Ответ: Поворот массива точек
Цитата:
|
Ответ: Поворот массива точек
Товарищи в условии про картинку ничо несказано.
|
Ответ: Поворот массива точек
SBJoker, вот, набросал пример:
http://www.forum.likosoft.ru/showthr...=newpost&t=321 1000 точек поворачивается быстро. управление - навести на точку, зажать ЛКМ и возить мыша влево-вправо. |
Ответ: Поворот массива точек
Отлично. Надо придумать ещё что-нибудь занимательное..
|
Ответ: Поворот массива точек
1)Удивительно: только-что проверил:
Код:
(x1-x2)*(x1-x2) быстрее чем: Код:
(x1-x2)^2 2)Вроде можно вычислить косинус из готового синуса угла быстрее, чем вычислять новый. |
Ответ: Поворот массива точек
drunnik, мсье маньяк?
увеличение скорсти на 0.28 процента вполне укладывается в погрешность. |
Ответ: Поворот массива точек
А проверял раз 5:
В первом варианте было всегда 6037(один раз было 6036); А во втором всегда 6054. Это скорее не погрешность. |
Ответ: Поворот массива точек
Цитата:
|
Ответ: Поворот массива точек
SBJoker
а cos и sin одного угла можно вообще одной операцией посчитать Код:
inline void jeSinCos(float Angle,float & SinValue,float & CosValue ) |
Ответ: Поворот массива точек
Цитата:
Оно вроде быстрее. Цитата:
Прочитать готовое значение—1 такт. Синус и Косинус—241(193-279) тактов на процессоре i80486. Но я думаю немогло это так быстро уменьшится. Потом я читал что где-то даже увеличивалась. Во первых сложная операция, во вторых сопроцессор(FPU) работает медленней процессора. |
Ответ: Поворот массива точек
Блин ну проверь, что быстрее будет выборка по таблице или расчёт на месте. И сам удивишся но выборка из заранее просчитаного массива проигрывает и оч. сильно.
Ибо! Расчёт син и кос на совр процессоре с частотой пусть 2000Mhz занимает хоть и много тактов, но они проводятся со скоростью 2000Mhz, а выборка из памяти ДДР-2 при частоте 400 Mhz, уже проигрывает в скорости в 5 раз на такт, но чтобы прочитать из памяти нежен не один такт! а несколько! А именно суммируем все 4 основновные задержки у меня это 4-4-4-16 в сумме(28нс) так что нетрудно догадаться что чтение займёт больше. Вот если таблицу синусов загнать в кэш процессора то да, скорость будет намного больше вычисления. Кароче сделай тест, который считает пару десятков тысяч синусов, и берущий из таблицы алгоритм. На современном компе быстрее будет расчёт. На древнем 486м быстрее будет из таблицы. З.Ы. значения из таблицы так же сильно проигрывают в точности, т.к. расчёт таблицы ведётся с опр. шагом, и код функции выбирающий ближайшее значение так же внесёт вклад в задержки. |
Ответ: Поворот массива точек
drunnik
в последнее время в x86 процессорах архитектура поменялась, теперь в центре стоит risc ядро, а вокруг него обвязка x86 выполненая в большей части на микрокоде потому такт как рабочая единица сложно применима, да и данные для 80486 слишком сильно устарели а выборка из масива, да, зачастую медленее расчёта на процессоре |
Ответ: Поворот массива точек
Тоже сначала сильно удивилсо....когда увидел результаты тестов Оксида в модуле oxi.SinCos. Провел независимое тестирование....это подтвердилось. Теперь тока на проце и щитаю....стараясь - где нужно сразу юзать sincos().
Если Джокеру надо повернуть полигон, вершины которого загнаны в массив, - SetRotation ? Полигон можно хэндлить. а насчет 2-го то тут уже чистая математика. |
Часовой пояс GMT +4, время: 11:53. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot