for($i=0; $i<500; $i=$i+1)

float $t=$i/10.0;

float $x=$t/5.;

float $y=3.0*sin($t*2.0);

float $z=1.0*cos($t*2.0);

curve -p ($x) ($y) ($z) -a “myCurve”;

delete “myCurve.cv[0]”;

Имейте также в виду, что количество точек на построенной кривой задается числом 100, а плотность их «укладывания» - выражением $1/10.0, определяющим как быстро растет переменная-параметр $t.

Если вы собираетесь всерьез заняться игрой с кривыми, удобно для начала будет вынести все числа, определяющие форму кривой, в отдельные переменные. Это позволит менять их только в одном месте, а также позволит взлелеять тайную мечту о том, чтобы вынести их в отдельное окошко с числовыми полями и большой красивой кнопкой «Построить суперкривую прямо сейчас!».

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

int $NumPoints=500;

float $Amp=3.0, $Freq=2.0, $Density=10.0, $xSpeed=5.0;

if(objExists(“myCurve”)==1) { delete “myCurve”; } curve -p 0 0 0 -n “myCurve”; int $i;

for($i=0; $i<$NumPoints; $i=$i+1)

{

float $t=$i/$Density; float $x=$t/$xSpeed; float $y=$Amp * sin($t*$Freq); float $z=$Amp * cos($t*$Freq); curve -p ($x) ($y) ($z) -a “myCurve”;

}

delete “myCurve.cv[0]”; Как заметили острозоркие программисты, скрипт сначала полностью выполняется, и только потом обновляется экран. В качестве бонуса за терпение могу предложить команду refresh, принудительно обновляющую экран. Если вставить ее в самый конец тела цикла, вы увидите «живое» построение кривой (естественно, это увеличивает время работы скрипта).

refresh;

}

delete “myCurve.cv[0]”;

А теперь немного трюков для взрослых строителей процедурных кривых.

Чтобы немного «помять» кривую, можно добавить случайный шум в ее амплитуду.

float $y=($Amp+rand(-0.5,0.5)) * sin($t*$Freq); float $z=($Amp+rand(-0.5,0.5))* cos($t*$Freq);

Чтобы сделать «восьмерку», умножьте дополнительно величину $z на еще один синус:

float $y=$Amp * sin($t*$Freq);

float $z=$Amp * cos($t*$Freq) * sin($t*$Freq);

Но чтобы построить все кривые на свете, следует пойти в книжный магазин и купить книжку: Е.В. Шикин, М.М. Франк-Каменецкий «Кривые на плоскости и в пространстве». Там приведены формулы для построения громадного количества кривых.

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

Совет. Лучше всего сохранять тексты из Script Editor, просто копируя их в буфер обмена (Ctrl-c) и вставляя в любимый текстовый редактор. Если выполнить в Script Editor пункт меню File=>Save Selected, текст сохранится в указанный вами файл с «короткими» концами строк, то есть будет читаться, например, в Word-Pad, тогда как в Notepad вы увидите «кашу» из склеенных строк.

Прежде, чем перейти к анимированному построению кривой с помощью expression, остановлюсь на сообщении об ощибке, которое часто приводит пользователей в тупик.

Invalid redeclaration и область видимости переменных

Начну с совета, ошеломляющего своей свежестью.

Совет. Обязательно читайте сообщения об ошибках, которыми вас щедро угощает MAYA. Я имею в виду вот что: надо не только горестно вздыхать, получив сообщение об ошибке, но и пытаться понять (и если нужно, то со словарем!), чем Майя хочет порадовать вас на этот раз… Есть, однако, одно сообщение, которое приводит многих начинающих MEL-маньяков е тупик. При этом встречается оно довольно часто. Звучит оно так:


⇐ вернуться назад | | далее ⇒