28-06-2005, 23:14
|
|
|
חבר מתאריך: 16.06.03
הודעות: 247
|
|
פתרון לבעיית הזויות הגדולות מ90 (מעלות/רדיאנים)..+דוגמא
בעייה שנתקלתי בה במהלך איזה פרוייקט שעבדתי עלייו, אז החלטתי לא להתייאש ולמצוא פיתרון.
אני מניח שרבים ממכם כבר נתקלו בבעיה הזאת.
נגיד למשל אתם רוצים לעשות כדור באמצע המסך, ושלידו יהיה רשום מהי הזוית בינו לבין המצביע (עכבר).
הבעיה היא שאין אפשרות למצוא זוית הגדולה מ90 באופן דינמי (מתמטי), מכל מיני שיקולים מתמטיים (עצם העובדה שקיימים שני שיפועים שווים בשני רבעים. ובנוסף הכלים המתמטיים cos,sin,tan לא מבדילים בין הרביעים). כלומר הבעיה היא לחשב זויות שהיא מעבר לרביע הראשון.
הנה הדוגמא לפיתרון:
https://2005-uploaded.fresh.co.il/2...29/80472142.swf
אז אתם בטח שואלים את עצמכם "נו, אז נגיד נתקלתי באותה בעיה, איך אני פותר אותה?"
טוב, אז תחזיקו חזק כי הפיתרון קצת....הממ... מסובך..
את האמת, הוא ממש פשוט כשמבינים אבל מבחוץ הוא נראה מפחיד.
קוד:
x=arw._x-mc1._x;y=arw._y-mc1._y;
a=Math.abs((Math.atan(y/x)+(Math.acos((x/Math.abs(x))/(y/Math.abs(y)))/2)));
b=Math.acos(x/Math.abs(x))/2*Math.sin(Math.acos((x/Math.abs(x))/(y/Math.abs(y)))/2);
c=Math.acos(y/Math.abs(y))*Math.sin(Math.acos((x/Math.abs(x))/(y/Math.abs(y))*-1)/2);
d=Math.acos(y/Math.abs(y))*1.5*Math.sin(Math.acos((x/Math.abs(x))/(y/Math.abs(y)))/2);
R=a+b+c+d;//Radian
a=(180/Math.PI)*(a);
b=(180/Math.PI)*(b);
c=(180/Math.PI)*(c);
d=(180/Math.PI)*(d);
r=a+b+c+d;//Degree
זו מן 'נוסחא' אחת גדולה..
פשוט לעשות "העתק הדבק" , לשנות את ה X וה Y ליחסים שאתם צריכים וקבלתם נוסחא למציאת זויות הגדולה מ90..
R זה ברדיאנים (שאגב, מי שלא יודע, פלאש עובדת רק עם רדיאנים, חוץ מה rotation).
r זה במעלות....
_____________________________________
~-LiViDuS-~
...Previous knowen as AshvaK...
|