![]() |
|
||||||||||
|
|||||
|
Регистрация: Aug 2005
Адрес: живу в Миловке
Сообщений: 101
|
Как говорится и на старуху бывает проруха. Не варят мои тригонометрические мозги
)Дано:задаётся программно кривая (синяя), см аттач. необходимо: преобразовать её в синусоидальную кривую, сохраняя направление изгиба (красная). Я конечно подозреваю, что синусоиду можно разбить на более мелкие кривые, но как при этом сохранить функцию изгиба?
__________________
Тссс... не вспугните! Последний раз редактировалось veterok4; 01.02.2006 в 23:16. Причина: как тег [img] задавать? |
|
|||||
|
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
|
2.jpg - никак не синусойда, а график кривой. Читай математику
![]() |
|
|||||
|
loading 50%
|
Ну кривую программно можно вобще то по разному задать. Идея проста: система из нескольких уравнений, считается синус, дальше координаты пересчитываются относительно криволинейной системы координат - все.
|
|
|||||
|
Регистрация: Aug 2005
Адрес: живу в Миловке
Сообщений: 101
|
Цитата:
п.с. Сам читай тригонометрию!
__________________
Тссс... не вспугните! |
|
|||||
|
Во втором случае - это что-то вида
y(x) = A*sin(x) + B*sin(k*x); где A много больше B, k значительно больше 1.
__________________
Тут вы найдете ответы на почти все вопросы: А можно ли сделать так ? - Можно. Почему не работает ? - Неправильно сделано. Где ошибка ? - В ДНК. |
|
|||||
|
Цитата:
line2_mc.lineTo(x, 23*Math.sin(x*100) + 32*Math.sin(x/4) + 300); x++; не то, что нужно, но красиво...
__________________
Первый в России мультимедийный "глянцевый" журнал |
|
|||||
|
don't panic!
Регистрация: 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);
если нужна не окружность а какая-то хитрая дуга, то путей несколько: 1. двигать внешний клип программно по параболе/еще какой-то формуле. 2. двигать внешний клип по гайду, нарисованному ручками (сами понимаете, чем это удобно и чем не удобно) 3. взять класс Ивана Дембицкого - Path -- и с помощью него двигать внешний клип программно по любой кривой безье, как угодно. |
|
|||||
|
Регистрация: Aug 2005
Адрес: живу в Миловке
Сообщений: 101
|
Nox Noctis - респектище! красиво выглядит, конечно, но мне не нужна замедленная прорисовка... сейчас попытаюсь разобраться с кодом что тут к чему, а потом спроэцировать на свои рандомные дуги
....тема ещё не закрыта![]()
__________________
Тссс... не вспугните! |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
Цитата:
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 Дембицкого и будет тебе щастье. им очень легко пользоваться. |
|
|||||
|
а я круче Нокса ^_^
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. |
|
|
« Предыдущая тема | Следующая тема » |
|
|