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-маньяков е тупик. При этом встречается оно довольно часто. Звучит оно так: