قانونهای محاسباتی maxscript
میخام بعضی از قوانین یادگیری maxscript رو بگم ,البته برای اونایی که جدی میخان دنبال کنند.
.. یادگیری کتابهای ریاضی راهنمایی و دبیرستان
.. در عین حال بکار گیری اونا در maxscript
.. وتر مثلث به چه درد میخوره؟ خیلی خیلی مهمه برای maxscript فکرشو نمیکردید نه؟
.. مختصات xy...حتما توی کتابهای ریاضی مدرسه یه نگاهی بهش بندازید وگرنه تو maxscript کم میارید
.. هر چیزی تو maxscript یاد میگیرید حتما روی کاغذ اونو برای خود توضیح دهید
-------------------------------
قبل از شروع جدی maxscript باید بعضی از قانونهای محاسباتی maxscript را توضیح بدم.
maxscript برای محاسبه یک معادله اتکا زیادی به پرانتزها داره ( maxscript) , پس باید در استفاده از پرانتزها
وحتی در استفاده نکردن از آنها کاملا مسلط باشید. خیلی خیلی مهم "به کتابهای درسی ریاضی مراجعه شود"
MS مثل یک ماشین حساب میمونه
پرانتزها مثل یک مرز محاسباتی میمونند
اگر در یک محاسبه پرانتزی یا مرزی مشخص نکرده باشیم به این صورت محاسبه میشود
... ابتدا توان محاسبه میشود ^
... سپس تقسیم محاسبه میشود /
... سپس ضرب محاسبه میشود *
... سپس جمع و تفریق محاسبه میشود + - "که در این مورد آخر ترتیب محاسباتی لازم نیست"
همچنین اگر هر کدام از این عملگراها نباشد دیگری برای محاسبه مقدم خواهد شد , یعنی مثلا در یک محاسبه توان نباشد پس تقسیم مقدمتر است .
کد:
2.0 ^ 5.0 - 6.0 * 4.0 + 7.0 / 8.0
ابتدا 2 به توان 5محاسبه مشود
سپس 7 تقسیم بر 8محاسبه میشود
سپس6ضرب در 4 محاسبه میشود
در آخر سر جمع وتفریق میکنیم
جواب
8.875
:20:
قانونهای محاسباتی maxscript
فرض کنیم می خواهیم در یک معادله ابتدا جمع انجام گیرد سپس ضرب وبعد بقیه معادله , در اینجاست که از پرانتزها استفاده میکنیم, یعنی یک مرز محاسباتی تعیین میکنیم.
مثال:
کد:
2 ^ ( (5+6) * 2 )
4194304
توضیحات بیشتر در مورد این مثال :
کد:
5+6=11
2*11=22
2^22=
4194304
بعضی از شرایط خواندن کدها در MaxScript
خواندن کدها در MS دارای شرایطی است , که دانستن این مطلب بسیار مهم است
... Ms شروع بخواندن کد از خط اول می کند و هر حرف را می خواند تا خط تمام شود
سپس بررسی میکند آیا این خط دارای یک عبارت منطقی بوده تا جواب آن را بدهد
... اگر MS عبارتهای منطقی خود را در آن خط پیدا نکند (به هر دلیلی) به خطهای بعدی خواهد رفت. (در بعضی شرایط خطهای قبلی را نیزخواهد خواند) تا عبارت منطقی خود را پیدا کند تا جواب مناسب را بدهد, جواب درست یا error
... این شرایط برای خطهای بعدی نیز تکرار خواهد شد
... MS دارای سرعت فوق العاده بالایی در خواندن کدها میباشد
برای مثال: شما می خواهیدیک فضای بزرگ از ستارگان درخشان بسازید و نیاز به 4000 کره دارید با سایزهای گوناگون و قرار گرفتن آنها در مکانهای تصادفی,تاحالا فکر کردید به صورت دستی چقدر طول میکشه؟؟؟
اما این کار برای MS فقط چند لحظه است
برای درک بیشتر مطالب, بعضی توضیحات را با مثال می گم
مثال1
MS ابتدا متغیر a را برابر 10 قرار میدهد( پس خواندن خط اول تمام شد) جواب خط اول 10 است
سپس a را که همان مقدار 10 است در 5 ضرب کرده (پس خواندن خط دوم تمام شد) جواب خط دوم 50 است
10
50
مثال2
MS ابتدا میخواهد b را در 2 ضرب کند مشکل اینجاست ک حرف b برای MS بی معنی است و عدد 2 در یک حرف مجهول قابل ضرب نیست( پس خواندن خط اول تمام شد) جواب خط اول یک خطا است -- No ""*"" function for undefine
متغیر b را برابر 15 قرار میدهد (پس خواندن خط دوم تمام شد) جواب خط دوم 15 است
بیایید مثال دوم را برای بار دوم اجرا کنیم , چه اتفاقی می افته ؟
کد بدون مشکل برای بار دوم اجرا خواهد شد, چرا؟؟
جواب خط اول 30
جواب خط دوم 15
ok
علت این است که زمانی که کد را برای بار اول اجرا کردیم خط اول با خطا مواجه شد اما در خط دوم مقدار b تعیین شد, این مقدار تا زمانی که برنامه 3dsmax فعال باشد در حافظه موقت ذخیره خواهد شد
زمانی که همین کد را برای بار دوم اجرا میکنیم چون مقدار b قبلا در اجرای بار اول تعیین شده در خط اول قرار خواهد گرفت و 15 در 2 ضرب میشود و جواب خط اول 30 است
------------------------------------------
پس می بینیم که هر کد باید در مکان مناسب خودش بکار برده شود تا نتیجه ای که میخواهیم را بما بدهد
برای آشنایی با سرعت وقدرت MS این کد را اجراکنید
از منوی maxscript گزینه newscript را انتخاب کنید,
کد را در پنجره باز شده کپی کنید
از منوی فایل پنجره بازشده evaluate all را بزنید
سپس در آخر سر play کنید
کد:
for i = 1 to 500 do
(
s=sphere()
s.radius=random 5 14
s.segs = 16
s.pos=random [-400,-400,0] [400,400,0]
s.slice = on
s.sliceFrom =random 246 340
s.dir=random [50,0,70] [400,200,170]
animate on (
at time 0 s.pos.z=0
at time 30 s.pos.z = random 10 100
)
)
:5: