Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Позиция картинок в галерее: зависимость rotationZ от x свойства класса Bitmap (http://www.flasher.ru/forum/showthread.php?t=195183)

Wolsh 02.03.2013 17:08

Ну так и при чем здесь катеты, арккосинусы и прочие гипотенузы? Без них 90 градусов никак не разделить на кол-во "страниц"?

yasha005 02.03.2013 17:38

Цитата:

Сообщение от Wolsh (Сообщение 1123218)
Ну так и при чем здесь катеты, арккосинусы и прочие гипотенузы? Без них 90 градусов никак не разделить на кол-во "страниц"?

Так-то логично, но так уж получилось что Sync ход моих мыслей направил по сложному пути. В итоге вот что получилось:

Код AS3:

var i:int = bitmapPict.length;
const count:uint = i;
while(--i > -1)
{
        bitmapPict[i].rotationY = Math.acos((count - i) / count) * 180 / Math.PI;
}


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

Sync 02.03.2013 20:02

молчу-молчу. сообщения длиннее 1 строчки больше писать не буду.

yasha005 02.03.2013 20:18

Цитата:

Сообщение от Sync (Сообщение 1123242)
молчу-молчу. сообщения длиннее 1 строчки больше писать не буду.

Дело не в том из скольких строчек состоит сообщение

Вам, Sync, респект за идею, а Wolsh респект за идею более компактного варианта.

Добавлено через 47 минут
Более компактный вариант:

Код AS3:

var i:int = bitmapPict.length;
const count:uint = i;
while(--i > -1)
{
        bitmapPict[i].rotationY = ((count - i - 1) / count) * 90;
}
bitmapPict.reverse();

Хотя, учитывая то обстоятельство, что при этом придётся преобразовывать массив изображений в обратный массив, не считаю его более компактным (лично для себя), потому что так уж исторически сложилось, что обратные циклы мне больше нравятся чем прямые.

В любом случае, считаю, что оба варианта идеи имеют место быть. Просто тут уже дело вкуса.

Wolsh 03.03.2013 09:37

Цитата:

Ваш, Wolsh, вариант мне больше нравится
Цитата:

Сообщение от Sync (Сообщение 1123206)
Судя по приведенной вами картинке, угол между плоскостями абсолютно тупо равен 90/count [...] Нет никаких гениальных формул.

Цитата:

придётся преобразовывать массив изображений в обратный массив
А преобразовать формулу в обратную — не проще? Что-то типа bitmapPict[i].rotationY = i * count / 90;

Цитата:

не считаю его более компактным (лично для себя) [...] Просто тут уже дело вкуса.
Использовать один раз деление, чтобы узнать угол между листами, и затем одно умножение для каждого листа в цикле вместо монструозной тригонометрической формулы, считающей обратно собственные входные параметры только для того, чтобы раз в 10 замедлить выполнение кода и слегка подогреть процессор — это дело вкуса? Греческий эпос может нравиться Вам больше, чем японские хайку, но в программировании это — вопрос эффективности. И читабельности кода, разумеется.

yasha005 03.03.2013 10:33

Цитата:

Сообщение от Wolsh (Сообщение 1123294)
А преобразовать формулу в обратную — не проще? Что-то типа bitmapPict[i].rotationY = i * count / 90;

Использовать один раз деление, чтобы узнать угол между листами, и затем одно умножение для каждого листа в цикле вместо монструозной тригонометрической формулы, считающей обратно собственные входные параметры только для того, чтобы раз в 10 замедлить выполнение кода и слегка подогреть процессор — это дело вкуса? Греческий эпос может нравиться Вам больше, чем японские хайку, но в программировании это — вопрос эффективности. И читабельности кода, разумеется.

Позволю себе не согласиться с вами. Такое решение i * count / 90 не подходит по той причине, что картинок может быть больше 10, а значит угол разворота "книги" будет больше чем 90 градусов. За идею спасибо, но я всё-таки остановлюсь на своём решении.

Что же касается подогрева процессора тригонометрическими вычислениями, то разница в производительности между первым и вторым решением вообще не ощутима, особенно учитывая то обстоятельство, что времени на загрузку картинки надо гораздо больше, чем времени на вычисление её позиционирования. А учитывая тот факт, что расчёт позиционирования можно выполнять во время загрузки каждой картинки, то в этом случае ни для глаза пользователя изменений, ни уж тем более причин для разогрева процессора, каких-либо ощутимых, не будет наблюдаться.

Wolsh 03.03.2013 12:43

Фраза "что-то типа" не намекает Вам, что дальнейшее писано на коленке? ОК, уточняю: bitmapPict[i].rotationY = i * 90 / count;
Из-за Вашего творческого подхода к оформлению, там, несомненно, где-то еще и единица должна болтаться.
Но это уж Вам, как автору креативного цикла, решать, где. Мне лень расшифровывать эту красоту.


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

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.