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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.02.2006, 23:14
veterok4 вне форума Посмотреть профиль Отправить личное сообщение для veterok4 Посетить домашнюю страницу veterok4 Найти все сообщения от veterok4
  № 1  
Ответить с цитированием
veterok4
 
Аватар для veterok4

Регистрация: Aug 2005
Адрес: живу в Миловке
Сообщений: 101
По умолчанию Синусоидальная кривая! Кто смогёт?

Как говорится и на старуху бывает проруха. Не варят мои тригонометрические мозги)

Дано:задаётся программно кривая (синяя), см аттач.
необходимо: преобразовать её в синусоидальную кривую, сохраняя направление изгиба (красная).
Я конечно подозреваю, что синусоиду можно разбить на более мелкие кривые, но как при этом сохранить функцию изгиба?
Изображения
Тип файла: jpg 1.jpg (1.3 Кб, 60 просмотров)
Тип файла: jpg 2.jpg (1.8 Кб, 57 просмотров)
__________________
Тссс... не вспугните!


Последний раз редактировалось veterok4; 01.02.2006 в 23:16. Причина: как тег [img] задавать?
Старый 02.02.2006, 02:46
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 2  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
2.jpg - никак не синусойда, а график кривой. Читай математику

Старый 02.02.2006, 10:01
aksios вне форума Посмотреть профиль Отправить личное сообщение для aksios Найти все сообщения от aksios
  № 3  
Ответить с цитированием
aksios
loading 50%
 
Аватар для aksios

Регистрация: Jun 2005
Адрес: I am where I should be
Сообщений: 3,567
Отправить сообщение для aksios с помощью ICQ
Ну кривую программно можно вобще то по разному задать. Идея проста: система из нескольких уравнений, считается синус, дальше координаты пересчитываются относительно криволинейной системы координат - все.

Старый 02.02.2006, 10:54
veterok4 вне форума Посмотреть профиль Отправить личное сообщение для veterok4 Посетить домашнюю страницу veterok4 Найти все сообщения от veterok4
  № 4  
Ответить с цитированием
veterok4
 
Аватар для veterok4

Регистрация: Aug 2005
Адрес: живу в Миловке
Сообщений: 101
По умолчанию Интересно!

Цитата:
Сообщение от CrazyFlasher
2.jpg - никак не синусойда, а график кривой. Читай математику
Это синусоида -правда немного "скорректированная" направляющим изгибом... просьба не флудить.
п.с. Сам читай тригонометрию!
__________________
Тссс... не вспугните!

Старый 02.02.2006, 11:41
Skubent вне форума Посмотреть профиль Отправить личное сообщение для Skubent Посетить домашнюю страницу Skubent Найти все сообщения от Skubent
  № 5  
Ответить с цитированием
Skubent
 
Аватар для Skubent

Регистрация: Oct 2005
Адрес: Млечный Путь, 7-й рукав, YD AC-451, 3-я планета.
Сообщений: 996
Отправить сообщение для Skubent с помощью ICQ
Во втором случае - это что-то вида
y(x) = A*sin(x) + B*sin(k*x);
где A много больше B, k значительно больше 1.
__________________
Тут вы найдете ответы на почти все вопросы:
А можно ли сделать так ? - Можно.
Почему не работает ? - Неправильно сделано.
Где ошибка ? - В ДНК.

Старый 02.02.2006, 17:01
Kotana вне форума Посмотреть профиль Отправить личное сообщение для Kotana Посетить домашнюю страницу Kotana Найти все сообщения от Kotana
  № 6  
Ответить с цитированием
Kotana

Регистрация: May 2003
Адрес: Moscow
Сообщений: 66
Отправить сообщение для Kotana с помощью ICQ
Цитата:
Сообщение от Skubent
Во втором случае - это что-то вида
y(x) = A*sin(x) + B*sin(k*x);
где A много больше B, k значительно больше 1.
line_mc.lineTo(x, 23*Math.sin(x*100) + 32*Math.sin(x/34) + 100);
line2_mc.lineTo(x, 23*Math.sin(x*100) + 32*Math.sin(x/4) + 300);
x++;

не то, что нужно, но красиво...

Старый 02.02.2006, 17:15
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 7  
Ответить с цитированием
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
граждане!

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

что я предлагаю:
Код:
var radius = 200;
var amp = 20;
var speed = 1;
// количество завитков за один оборот на 360 градусов
var sin_number = 20;
//
this.createEmptyMovieClip("curve", 0);
curve._x = 200;
curve._y = 200;
curve.speed = speed;
//
curve.createEmptyMovieClip("plotter", 0);
curve.plotter.lineStyle(10, 0, 100);
curve.plotter.lineTo(1, 0);
curve.plotter.radius = radius;
curve.plotter.angle = 0;
curve.plotter.amp = amp;
curve.plotter.sin_number = sin_number;
//
curve.plotter.onEnterFrame = function()
{
	// вот тут синусоида. только по иксу.
	this._x = this.radius+Math.sin(this.angle)*this.amp;
	this.angle += (2*Math.PI/360)*this.sin_number;
};
//
curve.onEnterFrame = function()
{
	// а вот тут движение по дуге. 
	// в данном случае в качестве дуги взята окружность.
	var point = {x:this.plotter._x, y:this.plotter._y};
	this.localToGlobal(point);
	_root.lineTo(point.x, point.y);
	//
	this._rotation += this.speed;
};
//
lineStyle(2, 0xFF0000, 50);
moveTo(curve._x+radius, curve._y);
у меня ушло на этот скрипт 15 минут. из них половина - на придумывание.

если нужна не окружность а какая-то хитрая дуга, то путей несколько:

1. двигать внешний клип программно по параболе/еще какой-то формуле.

2. двигать внешний клип по гайду, нарисованному ручками (сами понимаете, чем это удобно и чем не удобно)

3. взять класс Ивана Дембицкого - Path -- и с помощью него двигать внешний клип программно по любой кривой безье, как угодно.

Старый 02.02.2006, 22:09
veterok4 вне форума Посмотреть профиль Отправить личное сообщение для veterok4 Посетить домашнюю страницу veterok4 Найти все сообщения от veterok4
  № 8  
Ответить с цитированием
veterok4
 
Аватар для veterok4

Регистрация: Aug 2005
Адрес: живу в Миловке
Сообщений: 101
Nox Noctis - респектище! красиво выглядит, конечно, но мне не нужна замедленная прорисовка... сейчас попытаюсь разобраться с кодом что тут к чему, а потом спроэцировать на свои рандомные дуги....тема ещё не закрыта
__________________
Тссс... не вспугните!

Старый 02.02.2006, 22:56
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 9  
Ответить с цитированием
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
Цитата:
Сообщение от veterok4
мне не нужна замедленная прорисовка
тогда вот так я бы сделал:
Код:
var center = {x:200, y:200};
var radius = 200;
var amp = 20;
var speed = 1;
var sin_number = 20;
//
var step = (2*Math.PI/360)*sin_number;
//
this.createEmptyMovieClip("curve", 0);
curve.createEmptyMovieClip("plotter", 0);
curve._x = center.x;
curve._y = center.y;
//
lineStyle(2, 0xFF0000, 50);
moveTo(curve._x+radius, curve._y);
//
var angle = 0;
for (var i = 0; i<=360; i += speed) {
	curve.plotter._x = radius+Math.sin(angle)*amp;
	var point = {x:curve.plotter._x, y:curve.plotter._y};
	curve.localToGlobal(point);
	//
	_root.lineTo(point.x, point.y);
	//
	curve._rotation += speed;
	angle += step;
}
те же яйца, только в профиль. :)
заметь, по-прежнему всего один синус.

а если у тебя такие прям произвольные кривые - бери Path Дембицкого и будет тебе щастье. им очень легко пользоваться.

Старый 03.02.2006, 00:22
Usnul вне форума Посмотреть профиль Отправить личное сообщение для Usnul Посетить домашнюю страницу Usnul Найти все сообщения от Usnul
  № 10  
Ответить с цитированием
Usnul
 
Аватар для Usnul

Регистрация: Mar 2001
Адрес: во сне
Сообщений: 2,701
Отправить сообщение для Usnul с помощью ICQ
а я круче Нокса ^_^
Код:
a = 20 //Apmlitude
r = 100 //Radius
n = 30 //Number of oscillations
_root.moveTo(r,0);
_root.lineStyle(2,0x000000,100);
for(i=1;i<=n/4;i+=2){
	_root.curveTo(Math.cos((i-0.5)*(360/n)*Math.PI/180)*(r+a),Math.sin((i-0.5)*(360/n)*Math.PI/180)*(r+a),Math.cos(i*(360/n)*Math.PI/180)*r,Math.sin(i*(360/n)*Math.PI/180)*r);
	_root.curveTo(Math.cos((i+0.5)*(360/n)*Math.PI/180)*(r-a),Math.sin((i+0.5)*(360/n)*Math.PI/180)*(r-a),Math.cos((i+1)*(360/n)*Math.PI/180)*r,Math.sin((i+1)*(360/n)*Math.PI/180)*r);
}

_root._x = _root._y = 200;
__________________
I'm only happy when it rains.
Waka Laka

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

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

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


 


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


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