Identity Of Code

هیچی و همه چی

Identity Of Code

هیچی و همه چی

توابع easing

موتور های Tweening اصولا از روشی که Robert Penner در سال 2002 معرفی کرده استفاده می کنند. تو یکی از کتاباش این روش رو توضیح داده و به زبان اکشن اسکریپت 1 پیادش کرده.  دیروز سورس کد های TweenLite رو نگاه می کردم بیشتر توابع دقیقا مثل توابع پنر بود.

خوندن کد های پنر زیاد آسون نیست اون هم بخاطر موضوع performance ـه. این موضوع  آدم رو تو دوراهی قرار می ده، باید کدوم رو فدای اون یکی کرد ؟ سرعت اجرا یا سرعت توسعه ؟ خودم بارها با این مشکل برخوردم و دقیقا نمی دونم کی باید چیکار کرد.

این روش از یکسری معادلات ریاضی استفاده می کنه که به اونها توابع Easing میگن ، برای یک سری توابع مثل مجزور و مکعب و کلا توابع ایکس به توان n روش ثابته. اما یکسری توابع مثل Back، Bounce,Elastic که خاص تر هستند و روش های مختلفی دارن ،و کارو یکم پیچیده تر می کنن. 

من می خوام در مورد تابع Elastic حرف بزنم، دو روش برای پیاده سازی این جرکت دیدم، یکیش اینه ک از توابع چند جمله ای با ضرایب و توان های خاص استفاده می کنه، دومی ترکیب یک تابع سینوسی و یک تابع نماییه، که این روش تو TweenLite استفاده شده. روش اول حسنش اینه ک از لحاظ پردازش و بهینه بودن خوب بنظر میرسه اما عیبش اینه ک نمیشه معادله رو با سادگی سفارشیش کرد، برای مثال ب سادگی نمیشه تعداد نوسانا رو افزایش داد. اما روش دوم، قبل از اینکه کد های TweenLite رو ببینم یه معادله پیاده سازی کردم ک شکل کلیش به این ترتیب بود :


که n تعداد نواسانات رو تعیین می کنه،این تابع به تنهایی نتیجه مطلوبی نمیده ، و کلا بیخیالش شدم تا این ک تو سورس کد توین لایت دیدم چیزی شبیه همین معادله بکار رفته منتهی با یک سری شرط و شروط که برای بازه های مختلف اعداد مختلف رو بده و این تابع فقط ناحیه ای خاصی رو ساپورت کنه، یک تفاوت جزیی دیگه ای هم داشت این بود که به جای عدد نپر 2 گذاشته بود.

این روش قابل کنترله ولی پردازش سنگینتری داره، تابع نمایی و سینوسی از یه طرف شرط و شروطی ک برای کدوم بازه کدوم تابع رو اعمال کنه از طرف دیگه. 


اما روش سومی هم که من اینجا ارائه اش کردم تابعی به این شکله :


این تابع از لحاظ کارایی نسبتا خوبه و حجم پردازش مثل تابع بالا رو در گیر نمی کنه و از طرفی کنترل روش هست و میشه تعداد نوسانات رو هم تعیین کرد. این تابع در حالت عادیش همون تابع sinx/x ـه که حدش تو نقطه صفر یکه منتهی با روش عادی جایگذاری نمیشه حلش کرد و به 0/0 مبهم بر می خوریم. تو ریاضیات می تونیم از قضیه  فشردگی یا قاعده هوپیتال حلش منیم. اما تو زبان های برنامه نویسی قضیه فرق می کنه.تو اکشن اسکریپت 0/0 بی نهایت میده در نتیجه کافیه وقتی عدد infinity شد مقدارش رو به 1 تغییر بدیم.


هر چند این توابع هیچکدوم کاملا مثل هم کار نمی کنن و اما شباهت کلی بین همشون هست.




پ.ن: این تابع در حالت عادی برای easeInOut برای n های کوچکتر از 3 در وسط حرکت کاهش و افزایش سرعت داره. اما برای easeIn و easeOut به صورت جداگانه بخوبی کار می کنه


آپدیت: برای حل مشکل بالا میشه در بازه x بزرگتر از  (1+1/2n-) و کوچکتر از 1 تابع خطی 2nx-2n+1 رو  بدیم.

البته دقیق تر هم میشه کار کرد، طبق قضیه مقدار میانگین (Mean Value Theorem) در بازه ی نام برده روی منحنی موجود نقطه ای وجود داره که مشتق اون برابره با شیب خط راستی که از اون دو نقطه می گذره، اگر اون نقطه رو شناسای کنیم میتونیم تابع رو برای x های بزرگتر از اون نقطه اعمال کنیم، اینجوری منحنی شیب خودش رو در بازه بیشتری حفظ می کنه و حرکت طبیعی تر به نظر می رسه.

معادلات قید

بعد از یه مدت جستجو تو اسلاید های GDC آقای Erin catto چیز هایی که در مورد قید ها و حلشون دریافتم رو نوشتم تا شاید بعدا  بدرد خودم یا کسی بخوره : 

http://s5.picofile.com/file/8147681918/constraintw.pdf.html

تشخیص برخورد ray , و AABB

یکی از راه های تشخیص برخورد ray و AABB این است که شی را بر اساس Slab تعریف کنیم،slab برابر فضای نامتنهای بین دو صفحه (در سه بعد) و یا دو خط (در دو بعد) است، از این تعریف می توانیم برای بیان چند ضلهی های محدب استفاده کنیم، هر slab  دارای  ساختار زیر است :  یک بردار واحد که نماینده جهت slab  است و دو مقدار عددی که هرکدام نماینده فاصله هر ضلع تا مبدا مختصات در جهت داده شده است . چون شکل  ما محدب هست در هر جهت دو برخورد وجود دارد. اگر d نماینده یکی از این فواصل باشد و n بردار عمود بر ضلع یا همان بردار جهت ما باشد؛ برای هر نقطه X روی  ضلع داریم :X.n=d

 
ادامه مطلب ...

الگوریتم andrew، محاسبه Convex Hull

اگر S  را یک مجموعه متنهایی از  نقاط در نظر بگیریم ، به کوچکترین چند ضلعی محدب که تمام این نقاط را در بر بگیرد ،  پوش محدب یا ((Convex Hull  می گوییم که معمولا" با CH(S)  نمایش می دهیم، مثالی که ممکن است تعریف را روشن تر سازد این است : یک صفحه چوبی را در نظر بگیرید که به طور تصادفی و نامنظم یک سری میخ تا میانه در آن کوبیده شده، اگر ما یک کش حلقه ای داشته باشیم و آن را دور این میخ ها بکشیم شکل بوجود آمده  دقیقا پوش محدب مجموعه میخ هاست.


 

ادامه مطلب ...

ماتریس دوران (Rotation Matrix)


ما معمولا برای مبدا مختصاتمون یک چارچوب در نظر میگیریم، اگر  دوبعد رو در نظر بگیریم دو محور وجود دارند که نماینده محور X و Y هستن.

اگر در یک سیستم قطبی یک بردار داشته باشیم با بزرگی |A|  و زاویه تتا برای تبدیل اون به بردار درسیستم مختصاتی دکارت میتونیم از رابطه زیر استفاده کنیم:


 

ادامه مطلب ...

ساعت ساز کور؟ یا ساعت بین کور ؟ (?The Blind Watch-Maker or The Blind Watch-Watcher)


دیروز مقاله ای رو از اقای ادیپ یوکسل خوندم در مورد تکامل، که عنوانش مربوط به کتاب آقای ریچارد داوکینز می شد (The Blind Watchmaker) طعنه ای بر برهان نظم آقای ویلیام پیلی،این کتاب در مورد تکامل کور و فرگشت هست ، پیدایش رو بر مبنای یک عامل کور توضیح میده،و وجود هوشمند یعنی خدا رو رد میکنه، اول این کتاب آقای داوکینگز یه حرفی میزنه، میگه که مساله  خدا در قدیم همیشه مربوط به فلسفه و الهیات بوده، چرا ما باعلم نیایم به این قضیه نگاه کنیم ؟ بعد همین ادعا رو در مورد اخلاقیات میکنه و میگه که علمه که میتونه رفتار بشر رو پیشبینی کنه و ...،  که من فکر می کنم ادعای سنگینیه، خیلی از آتئیست ها دید مکانیزمی-یا صرفا علمی نسبت به جهان دارن و همه  هستی رو از این پنجره می بینن.و همین باعث جزئی نگری میشه (مثل داستان فیل و کوران مولانا). و ازطرفی خیلی از خداباور ها به خلقت دفعی اعتقاد دارن، و تکامل رو کفر میدونن.من با این گروه کاری ندارم، الان خیلی از خدا باور ها به تکامل اعتقاد دارن،مثل خودم، اما تکامل طراحی شده (Designed Evolution) ، اما خدانابور هایی که  دست به دامن علم و تکامل میشن باید یک سری سوالا رو از خودشون بپرسن:

چرا فلان مولکول و فلان اتم و فلان ماده باید با هم ترکیب بشن و اولین سلول حیاط رو بوجود بیارن؟

چرا باید میل به بقا وجود داشته باشه ؟

آیا مدرکی وجود داره که ثابت کنه وجود جهان از لحاظ منطقی ضروریه ؟

قوانین فیزیک از کجا نشات میگیرن ؟

چرا دنیا اینگونه هست که ما میبینیم و طور دیگه نیست ؟ این ضرورت بخاطر چیه؟

پیدایش اتقاقی بیش نبوده، بیگ بنگ شانسی رخ داده و قوانین دنیا بوجود اومده؟ آیا این که ما میگیم بیگ بنگ شانسی بوده گذاره درستیه ؟ مگر شانس خودش مربوط به قوانین احتمالات نیست ؟ اتفاق در یک چاچوبی رخ میده که قانونی حاکم باشه، این قوانین از کجا میان ؟


کمی از حوضه علم باید بیرون بیایم و منصفانه به جهان نگاه کنیم، موضوع خیلی فراتر از اونیه که بتونیم ماده و انرژی رو ازلی بدونیم و همه چی رو تموم شده فرض کنیم.حتی در سطح مکانیزم هم خیلی ظرافت وجود داره که ما بتونیم اینا رو شانسی فرض کنیم. آقای ادیپ یوکسل مثال های جالبی در همین مورد میزنه، راجع به اتم هیدروژن.که زیر بنای هستیه.

حال با وجود این تفاسیر کدام تعریف رو باید بپذیریم ؟ خدای هوشمند؟ یا عامل کور ؟

اقای یوکسل از اصل تیغ اوکام اسم برده بود (Occam's Razor) ، طبق این اصل وقتی برای یک پدیده دو تا تعریف وجود داره، تعریف ساده تر تعریف درست تریه.من اعتقاد چندانی به این اصل ندارم، شاید واژه ساده درست نباشه،اما منطق میگه که تعریف معقول تر رو باید پذیرفت.

طراحی هوشمند طراح هوشمندی داره، جدا از اون به قول دکتر سروش خدا یعنی چرا به جای اینکه چیزی نباشد چیزی هست؟

آیا ساعت ساز نابیناست یا ما کوریم که ساعت رو درست نمی بینیم ؟

آخر آقای یوکسل حرف قشنگی زده بود: خدا همون قدر پیداست که 19 تو سوره74پیداست و همونقدر پنهانه که باز19 تو 74 پنهانه.

( برای کسایی که نمیدونن19چیه : http://www.mudathir.ir/  ،http://www.19miracle.org/ )

GJK(Gilbert–Johnson–Keerthi) algorithm

.جی جی کی یکی از معروفترین الگوریتم هایی هست که برای تشخیص برخورد اشکال هندسی محدب به کار میره(دو بعدی و سه بعدی) ، و این بهترین آموزشی بود که ازش پیدا کرد :
http://s5.picofile.com/file/8114232500/The_Gilbert.pdf.html

این تصویر هم به فهم مساله کمک میکنه (برای دیدن تصویر اصلی روی عکس کلیک کنید):



ترجمه جزوه ی دینامیک جسم صلب -RigidBodyDynamic

این جزوه  رو از reddit.com  پیدا و ترجمه کردم، البته قسمت هایی رو حذف کردم؛و همچنین قسمت هایی رو خودم اضاف کردم.

توجه داشته باشین که تو این جزوه صرفا به دینامیک و حرکت (خطی و زاویه ای) پرداخته شده؛ و در مورد collision ها هیچ بحثی نشده.

آخرش هم نمونه ای از as3 براش گذاشتم به جای نسخه اصلیش که پایتون بود، و همچنین  یه قابلیت هایی هم اضاف کردم بهش.

در مورد مدلی که پیاده سازی شده تو جزوه توضیح ندادم؛ مدلمون یک جسم دو بعدی مستطیلی شکل که با درگ کردن شکل نیروی فنر بین مکان نمای موس و نقطه ای از جسم صلب که کلیک شده بوجود میاد و به کل سیستممون وارد میشه، و طبق قانون گشتاور ها ، حرکت زاویه ای هم بر جسممون اعمال میشه و البته هیچ نیروی میرایی به جسم وارد نمیشه، (صرف نظر از نیروی .drag و اصطکاک)(مثال ساده :برگ شناوری روی آب راکد که با انگشت بهش ضربه بزنیم)

لیست فرمول های محاسبه ممان اینرسی شکل های مختلف هندسی :
http://en.wikipedia.org/wiki/List_of_moments_of_inertia

لینک دانلود مقاله:

http://www.4shared.com/office/VFkfujVuce/rigidbodydynamic.html

https://www.dropbox.com/s/pi4r3bts0i5ekqs/rigidbodydynamic.pdf

http://s5.picofile.com/file/8108649334/rigidbodydynamic.pdf.html