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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.05.2010, 18:44
azatkh вне форума Посмотреть профиль Отправить личное сообщение для azatkh Найти все сообщения от azatkh
  № 1  
Ответить с цитированием
azatkh

Регистрация: Oct 2008
Сообщений: 20
По умолчанию Построение кривой по точкам из массива

Пожалуйста, подскажите, а то я совсем запутался в своих мыслях.

Задача:
Имеется вот такой генератор сигналов:


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

Объясню подробнее.
формула синусоиды
x(t)= A*sin(2п*f*t)

для генерации массива чисел я использую следующую формулу:
N(iTo) = Asin (2пf iTo),
где i - где i= 1, 2,3….- номер отсчета функции, N(iTo) – значение функции в момент времени iTo.
амплитуда А и частота f задаются пользователем.
To(шаг квантования) высчитывается по формуле, в зависимости от заданной дельты.

создание массива необходимо для дальнейших арифметических действий с сигналом из второго канала.

поиски по инету привели только к такому скрипту:
Код AS3:
var r:int=100;//радиус
var rad:Number=Math.PI/180;
var x_scale:int=1;//Сжатие по х-оси
var y0:int=stage.stageHeight/2;//0-координата по у
var x0:int=10;//0-координата по х
var period:int=stage.stageWidth*x_scale;//"длина" графика
var sh:Shape = new Shape();
addChild(sh);
var g:Graphics=sh.graphics;
//paint coordinate axis
g.lineStyle(0,0);
g.moveTo(x0,0);
g.lineTo(x0, stage.stageHeight);
g.moveTo(x0,y0);
g.lineTo(stage.stageWidth,y0);
g.lineStyle(0,0xff0066);
g.moveTo(x0/2,y0-r);
g.lineTo(x0*1.5,y0-r);
g.moveTo(x0/2,y0+r);
g.lineTo(x0*1.5,y0+r);
// paint sinusoida
g.lineStyle(1,0x0000FF);
g.moveTo(x0,y0);
for (var i:int=0; i<1000; i+=1) {
g.lineTo(x0+i/x_scale,y0+r*Math.sin(rad*i));
}
Но это не подходит, потому что нет массива чисел. И при задании i = 0.1 или 0.01 все виснет. Даже если в условии будет i<100

Пожалуйста, помогите. Подскажите, как будет правильнее создать этот массив.
Потому что он может содержать 1000 значений. К примеру, если мы захотим восстановить сигнал по 1000 точкам, с шагом 0.01

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

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
for (var i:int=0; i<1000; i+=1) {
int -> Number для начала
trace(int(1+0.1)) - для размышлений.

Старый 25.05.2010, 19:20
azatkh вне форума Посмотреть профиль Отправить личное сообщение для azatkh Найти все сообщения от azatkh
  № 3  
Ответить с цитированием
azatkh

Регистрация: Oct 2008
Сообщений: 20
это как то поможет в создании массива???

Старый 25.05.2010, 22:11
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 4  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
А, ну массив так массив, раз уж взялся. Кабы ещё знать, чего ж в нём быть должно...
Ну может что-то типа
Код AS3:
var maxT:Number = 10;
var step:Number = 0.1;
var arr:Array = new Array(int(maxT / step));
var A:Number = 2;
var f:Number = 1;
for (var t:Number = 0, j:int = 0; t < maxT; t += step, ++j) {
    arr[j] = 5*Math.sin(Math.PI*1*t);
}
trace(arr);

Старый 26.05.2010, 17:16
azatkh вне форума Посмотреть профиль Отправить личное сообщение для azatkh Найти все сообщения от azatkh
  № 5  
Ответить с цитированием
azatkh

Регистрация: Oct 2008
Сообщений: 20
Спасибо огромное! Вроде получается
Но слишком много кода. слишком сильно я вешаю систему.

Сейчас графики выводятся в мувиклипе, в котором есть 5 кадров. В каждом кадре код для соответствующего типа сигнала. В зависимости от того, какая кнопка "ок" жмется срабатывает gotoAndStop на нужный кадр.

Теперь хочу попробовать сделать так, чтобы код построения графиков был в одном кадре мувиклипа. т.к. часть кода про задание координат и считывание переменных одинаковый, хочу сделать прослушивание на то, какой тип сигнала нажат. И вытащить переменные именно от туда.

Подскажите, могу ли я обозвать все одинаковые поля инпуттекста в разных типах сигналах одним инстанс имененем? Например, для каждого сигнала у меня есть параметр А (амплитуда). Как можно сделать так, чтобы перед построением графика, он брал значение А именно из выбранного типа сигнала?

Спасибо за помощь и поддержку!

Старый 26.05.2010, 17:49
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 6  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Теперь хочу попробовать сделать так, чтобы код построения графиков был в одном кадре мувиклипа
Если вы так реализуете, то тогда
Цитата:
все одинаковые поля инпуттекста
конечно если я правильно понял - это амплитуда, частота, погрешность.. Так вот эти поля будут всего в одном экземпляре в первом кадре. Останется тогда реализовать нажатие кнопок с типом сигнала.

Старый 26.05.2010, 17:59
azatkh вне форума Посмотреть профиль Отправить личное сообщение для azatkh Найти все сообщения от azatkh
  № 7  
Ответить с цитированием
azatkh

Регистрация: Oct 2008
Сообщений: 20
в том то и проблема, что они не в одном кадре.
каждый сигнал у меня в разных кадрах.
Вот например вид генератора, при выбранной параболе


Красным отмечена область мувиклипа в котором мы находимся.
Вся эта область меняется в зависимости от выбранной кнопочки с типом сигнала выше

а первый кадр этого мувиклипа состоит из строки "Выберите тип сигнала"


Последний раз редактировалось azatkh; 26.05.2010 в 18:01.
Старый 27.05.2010, 06:03
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 8  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Проще то было бы как раз все в первый кадр положить - сам интерфейс же не меняется.

Старый 27.05.2010, 06:15
azatkh вне форума Посмотреть профиль Отправить личное сообщение для azatkh Найти все сообщения от azatkh
  № 9  
Ответить с цитированием
azatkh

Регистрация: Oct 2008
Сообщений: 20
относительно первого кадра меняется.
в первом кадре только текст - "выберите тип первого сигнала" (как внизу)

Старый 27.05.2010, 13:32
MidnightOne вне форума Посмотреть профиль Отправить личное сообщение для MidnightOne Найти все сообщения от MidnightOne
  № 10  
Ответить с цитированием
MidnightOne
 
Аватар для MidnightOne

Регистрация: Jan 2010
Сообщений: 62
Чтоб не морочиться с кадрами, я б создал мувиклипы для каждого сигнала и оперировал их .visible

PS: Если пишите код в кадрах, советуют создавать для этого отдельный слой.

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

Теги
по точкам , построение кривой

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

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


 


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


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