Randomize کردن دو عملیات مختلف
حتما با مفهوم random آشنا هستید ,یعنی به صورت تصادفی یا شانسی از بین یک مجموعه یک چیزی را انتخاب کردن.
در maxscript تابعی وجود داره به نام random که با استفاده از اون میشه دو عدد مختلف یا دو position مختلف را
randomize کرد.
مثال:
کد:
ran = Random 1.0 100.0
29.8743
ran = random 1 100
87
-------
ran_pos = random [0,0,0] [10,15,30]
[9.32051,1.01729,7.23876]
ran_pos = random [0,0,0] [10,15,30]
[7.23408,2.26196,13.4034]
اما من اینجا مخوام دو عمل مختلف را randomize کنم نه دو عدد یا دو position را
فرض کنیم یک موضوع داریم و مخواهیم از بین rotation و position هر بار به صورت تصادفی یک حالت را انتخاب کنه
پس مینویسیم
کد:
ran = random 0 1
--------------
if ( ran == 1 )
then ( move $ [10,12,15] )
else ( if ( ran == 0 ) do ( rotate $ 40.23 z_axis) )
*در قسمت اول اسکریپت>
اعداد صفر و یک را randomize کردیم
*در قسمت بعدی اسکریپت شروطی تعیین کردیم>
که اگر مقدار ran یک شد , جسم یا اجسامی که در حالت انتخاب باشند پوزیشن آنهارا تغییر دهد
اگر مقدار ran صفر شد جسم یا اجسامی که در حالت انتخاب باشند, بچرخند
*فرمول مربوط به حرکت دادن یک موضوع در مکس اسکریپت
کد:
move
name_obj [<x,y,z>]
حرکت موضوع به مقدار داده شده در محورهای مورد نظر
کد:
move $box01 [10,0,0]
OK
در این مثال ما
box را در محور x به مقدار 10 واحد حرکت دادیم
اگر این مثال را 20 بار دیگر اجرا کنیم با این کار box ما 200 واحد حرکت خواهد کرد هر بار 10 واحد
*چرخش موضوع به واحد درجه در محورهای تعیین شده
کد:
rotate
<object> (eulerangles x y z)
کد:
rotate $box01 (eulerangles 10 0 50)
با استفاده از این تابع موضوع را در واحدهای درجه به مقدار لازم در محورهای مور نظر میچرخانیم
کلمه کلیدی eulerangles باید قبل از محورها وارد شود تا چرخش به میزان درجه محاسبه شود
اگر این مثال را فرضا 10 با اجرا کنیم box ما در محور x صد درجه خواهد چرخید و در محور z پانصد درجه
*علامت $ یعنی>
هر موضوع یا موضوعاتی که در حالت انتخاب باشند
=====
=====
حالا auto key را روشن کنید هر بار timeSlider را 20 فریم حرکت دهید و همچنین اسکریپت را اجرا کنید
>>>>>>>>>>>>>>>
تمرین:
با راندوم کردن مقدارهای move و rotation در مثال
کد:
ran = random 0 1
--------------
if ( ran == 1 )
then ( move $ [10,12,15] )
else ( if ( ran == 0 ) do ( rotate $ 40.23 z_axis) )
آن را پیشرفته تر کنید
در همین تاپیک اونو قرار دهید
:31:
Randomize کردن دو عملیات مختلف _نکته
فقط یک توضیحو فراموش کردم در مورد کد
کد:
( rotate $ 40.23 z_axis)
این شکل دیگری از فرمول چرخش هستش که به صورت تک محوری عمل میکنه
صورت کلی به این صورت هستش
کد:
rotate <object> <angle> x_axis
rotate <object> <angle> y_axis
rotate <object> <angle> z_axis
محاسبه به درجه خواهد بود
بکار بردن توابع مثلثاتی در مکس اسکریپت
در این اسکریپت من یک موضوع رو در یک مسیر دایره ای با یک شعاع معین حرکت خواهم داد
و از توابع sin و cos استفاده میکنم
در اینجا فرض میکنیم شما با توابع مثلثاتی آشنا هستید ,اگر نه پس به کتابهای دبیرستان یه نگاهی بندازید
طبق قوانین مثلثات هر چی زاویه در cos به صفر نزدیکتر باشد مقدار cos افزایش می یابد و بر عکس
طبق قوانین مثلثات هر چی زاویه درsin به صفر نزدیکتر باشد مقدار sin کاهش می یابد و بر عکس
طبق این دو قانون اگر یک موضوع که در یک مسیر دایرهای حرکت میکند اگر از مختصات x کم شود به مختصات y اضافه میشود و بر عکس
پس مینویسیم
کد:
cur=currenttime
c=(60)
mm=( (currenttime as integer)/160 )
x=c * cos (mm)
y=c * sin (mm)
$.pos=[x,y,0]
توضیح توابع
========================
با استفاده ار این تابع میتوان تعیین کرد که
TimeSlider هم اکنون در چه فریمی قرار دارد
مثال
timeslider
را در فریم 50 قرار دهید سپس
بنویسید
کد:
my_current_frame = CurrentTime
50f
=========================================
as یک convertor هستش که بعضی از مقادیر خاص را به یک کلاس تبدبل میکند برای درک بهتر به مثال توجه کنید
مثال :
ما یک عدد اعشاری داریم مانند 2.5 مخواهیم اونو به یک عدد صحیح با Integer تبدیل کنیم یعنی عددی بدون اعشار, پس مینویسیم
کد:
mynum = 2.5 as integer
2
یا تبدیل اعداد صحیح به اعشاری
---------------------
در اسکریپت اصلی ما چون مقدار currenttime یک مقدار زمانی هستش نه یک عدد صحیح پس نیاز به تبدیل داره
فرض کنیم currenttime ما در فریم 1f قرار دارد پس مینویسیم
کد:
mytime = currenttime
1f
my_angle = mytime as integer
160
اما ما یک مشکل داریم زمانی که فریم 1f رو به حالت عدد صحیح یا integer تبدیل میکنیم
عدد 160 را در جواب داد در حالی که ما انتضار داشتیم مقدار 1f رو به عدد صحیح 1 تبدیل کنه
علت این است که هر فریم به کوچکترین واحد خود تبدیل شده یعنی هر فریم برابر 160tick هستش
کد:
1f == 160t
true
2f == 160t * 2
true
پس اسکریپتو اینجور اصلاع میکنیم
کد:
mytime = currenttime
1f
my_angle = (mytime as integer) / 160
1
=============================================
مقدار c همان شعاع دایره خواهد بود
مقدار mm همان زاویه ما خواهد بود برای sin , cos
مقدارهای sin و cos مختصات ما در دو بعد x و y خواهند بود
مقدار z را صفر در نظر میگیریم
در آخر سر, موضوع که در حالت انتخاب هستش position اونو تعیین میکنیم
--------------
برای بکار بردن اسکریپت به اینصورت عمل کنید
*اندازه نوار زمان رو روی 360 فریم تنضیم کنید
time slider رو در فریم صفر قرار داده AutoKey را روشن کنید و اسکریپت را اجراکنید
*سپس time slider را در هر بار 45 فریم جلو برده و اسکریپت را اجرا کنید
یعنی در فریمهای
کد:
0
45
90
135
180
225
270
315
360
باید اسکریپت اجرا شود
*در آخر سر
play کنید
======================================