Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.06.2016, 17:21
ivaniyses вне форума Посмотреть профиль Отправить личное сообщение для ivaniyses Найти все сообщения от ivaniyses
  № 1  
Ответить с цитированием
ivaniyses
[+1.4 08.02.14]
 
Аватар для ivaniyses

Регистрация: Dec 2013
Адрес: Барабинск
Сообщений: 137
Отправить сообщение для ivaniyses с помощью Skype™
По умолчанию Графическое отображение интенсивности

Добрый день, коллеги!
В общем случае нужно в зависимости от значения некоторой переменной подобрать характерный цвет.
Возникла следующая задача: Имеется двумерный массив. Каждый элемент такого массива содержит два элемента - координату и интенсивность звука в этой координате. Зная амплитуду интенсивности (Какое максимальное и минимальное значение среди всех интенсивностей), нужно подобрать к точке цвет.
Вот примерно то, что должно получатся (Для понятности)
Изображения
 
__________________
trace("Я нуб");

Старый 13.06.2016, 18:37
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 2  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Представьте себе цвет как комплекс трёх параметров - красный, зелёный и синий(RGB).
Один цвет хранится в четырёх байтах, последний из которых обычно пустой при отсутствии transparency(прозрачности).
Чтобы получить из цвета компоненты, необходимо использовать битовые сдвиги.
Код AS3:
var color:uint = 0x0F41AC;
var rgb:Object = {};
rgb.red = color >> 16 & 0xFF; //сдвигаем на 2 байта, чтобы остался только первый байт(2 байта обрезаются)
rgb.green = color >> 8 & 0xFF; //сдвигаем на 1 байт, чтобы остались только 2 первых байта, и обрезаем побитовым И
rgb.blue = color & 0xFF; //обрезаем и остаётся только последний байт
 
var rebuiltColor:uint = ((rgb.red << 16) | (rgb.green << 8) | rgb.blue) & 0xFFFFFF; //так собираем компоненты назад.
Ваша задача выбрать в фотошопе 2 цвета, скопировать их компоненты(или HEX-код, который будет программно разбиваться на компоненты) и сделать плавный переход из одного в другой. Т.е. должен получиться метод, возвращающий цвет в зависимости от параметра(0~1)
Воспользоваться можно любой из интерполяций, линейная - самая быстрая.
Код AS3:
 
		public static function interpolate(a:Number, b:Number, x:Number, z:Number = 0, c:Number = 0):Number
		{
			switch (interpolation)
			{
				case LINEAR:
					return  a * (1 - x) + b * x;
					break;
				case COSINE:
					var ft:Number = x * 3.1415927;
					var f:Number = (1 - Math.cos(ft)) * .5;
					return  a * (1 - f) + b * f;
					break;
				case CUBIC:
					var P:Number = (c - b) - (z - a);
					var Q:Number = (z - a) - P;
					var R:Number = b - z;
					var S:Number = a;
					return P*x*x*x + Q*x*x + R*x + S;
					break;
			}
			return 1;
		}
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 13.06.2016 в 18:56.
Старый 13.06.2016, 19:17
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 3  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Удобнее всего это будет сделать через шейдер.
Сперва рассчитываете громкость в каждом конкретном пикселе, от 0 до 1. Затем просто делаете выборку из одномерной текстуры с цветом.
__________________
Дети не должны знать о своих родителях

Старый 13.06.2016, 19:18
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 4  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Tails++;
__________________
There is no thing in this world that is not simple.

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:56.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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