Contacts
صفحه اصلی پورتال | صفحه اصلی تالار | ثبت نام | اعضاء | گروه ها | جستجو | پرسش و پاسخ | فروشگاه الکترونیکی | خرید پستی بازی های کامپیوتری





صفحه اول انجمنها -> تالار علوم -> پيدا كردن نقطه تقاطع نيمسازها در مثلث
 

ارسال يك موضوع جديد   پاسخ به يك موضوع ديدن موضوع قبلي :: ديدن موضوع بعدي

پيدا كردن نقطه تقاطع نيمسازها در
نويسنده
پيغام
bono056
کاربر جدید
کاربر جدید


تاريخ عضويت: 1 شنبه 18 ارديبهشت 1384
تعداد ارسالها: 9


3 شنبه 18 مرداد 1384 - 09:19
پاسخ بصورت نقل قول
سلام
من مختصات 3 راس مثلث رو دارم. ميخوام مختصات محل برخورد 3 نيمساز اين مثلث رو پيدا كنم.
و مختصات محل برخورد هر نيمساز با ضلع روبروش.
كسي فرمولاشو داره بذاره اينجا؟
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي
 

نويسنده
پيغام
bono056
کاربر جدید
کاربر جدید


تاريخ عضويت: 1 شنبه 18 ارديبهشت 1384
تعداد ارسالها: 9


4 شنبه 19 مرداد 1384 - 10:09
پاسخ بصورت نقل قول
سلام
حتما سيستمي كه استفاده ميكنم نداره اين فرمول ها رو كه سوال كردم Idea
اگه داري لطفا بصورت كد برنامه به هر زبوني كه راحتي بذار.
يا اگه لينكي داري كه اين فرمول ها رو داره بذار اينجا لطفا.
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي
 

نويسنده
پيغام
كنجكاو
مدیر پروژه
مدیر پروژه


تاريخ عضويت: 1 شنبه 29 شهريور 1383
تعداد ارسالها: 180
محل سكونت: نپتون-زمين


3 شنبه 5 مهر 1384 - 15:20
پاسخ بصورت نقل قول
@اسماعيل:
نقل قول:
در سايت iranvig.com درخواست کنید...

اسماعيل جان، مگه سايت خودمون چه ايرادي داره آخه... Evil or Very Mad

@bono056:
نقل قول:
من مختصات 3 راس مثلث رو دارم. ميخوام مختصات محل برخورد 3 نيمساز اين مثلث رو پيدا كنم.
و مختصات محل برخورد هر نيمساز با ضلع روبروش.

تا حالا تو اين سايت يه همچين سوال كوتاه و واضحي نديده بودم، خيلي جالب بود... Laughing

---------------------------------------
معلومات:
پس طبق فرموده شما، فقط مختصات سه راس مثلث را در اختيار داريم... Idea
رئوس مثلث با A و B و C مشخص خواهند شد.
---------------------------------------
مجهولات:
شما محل تلاقي نيمسازهاي مثلث را مي خواهيد و همينطور محل برخورد آنها را با ضلع روبرويشان... Surprised
محل تلاقي نيمسازها = مركز دايره محاطي؛ كه با حرف I نمايش داده مي شود (InCenter)
محل برخورد نيمسازها با ضلع روبرويشان كه با حروف F، E و G نمايش داده مي شوند.
---------------------------------------

جواب:
از آنجايي كه محل برخورد هر سه نيمساز (Bisector) در واقع همان مركز دايره محاطي(InCenter of the InCircle) است، پس نيازي به محاسبات Trilinear Co-ordinate نمي باشد زيرا آلفا، بتا و گاماي ما هر سه برابر عدد 1 مي باشند... Laughing

حدس مي زنم كه شما در دو بعد كار مي كنيد پس دستگاه مختصات (Graph) ما هم دو بعدي خواهد بود.

1. بسيار خوب، حالا كه مختصات هر سه راس مثلث مشخص است ابتدا طول هر ضلع را حساب مي كنيم.
---------------------------------------
اگر كافي است فقط توضيح مختصر هر شماره را مطالعه بفرماييد، اما براي بقيه دوستاني كه به اطلاعات جزيي تر و ساده تر علاقمند هستند، توضيح بيشتر داده شده است...
---------------------------------------
(توضيح رياضي قسمت اول)
محاسبه طول پاره خطي كه مختصات دو راس آنرا در اختيار داريم:
از آنجايي كه ما در دو بعد كار مي كنيم پس فقط با طول و عرض كار داريم (x و y)
ابتدا طول (x) دو نقطه خط را از هم كم كرده و حاصل آنرا به توان 2 مي رسانيم و حاصل آنرا نگه مي داريم، حالا همين كار را براي براي عرض (ارتفاع) انجام مي دهيم يعني مختصات ارتفاع دو نقطه را از هم كم كرده و به توان 2 مي رسانيم و حالا حاصل آنرا با حاصل توان قبلي جمع مي كنيم و در آخر مجوز آنرا مي گيريم.
تا اينجا طول(درازا!) خط را بدست آورده ايم.

(توضيح براي برنامه نويسي)---> براي توضيح از قواعد زباني ++C/C استفاده مي كنم. در ضمن توصيه مي كنم ابتدا توضيح رياضي را مطالعه بفرماييد.
فرض كنيد كلاس يا استراكچري براي نقطه تعريف كرده ايم به نام Point كه مختصات هر x و y هر نقطه را در خود نگه مي دارد (مي توانيد از int استفاده كنيد) و ما سه راس مثلث را با اين نوع داده اي تعريف كرده ايم، به اين صورت:
;Point A, B, C

و مختصات مثلثمان را هم به اين صورت در نظر مي گيريم (براي ارائه مثال)
;A.x = 110; A.y = 110
;B.x = 230; B.y = 230
;C.x = 360; C.y = 130

حالا مي رسيم به محاسبه اندازه خطوط، براي اينكار ابتدا سه متغير تعريف مي كنيم. (به تعداد اضلاع!) مسلما اين متغيرها مي توانند هر نامي داشته باشند اما به نظرم يكي از اين دو نوع بسيار واضح خواهد بود. مي توانيم طبق معمول تعاريف استاندارد رياضي به اينصورت تعريف كنيم (يا به هر شكل كه خودتان صلاح مي دانيد.) كه طول خط AB يا s12 ...(فقط براي مثال!)
من A,B,C را به ترتيب برابر 1,2,3 فرض مي كنم، پس سه متغير از نوع double تعريف مي كنيم:
;double s12, s23, s31

براي محاسبه طول خط AB، طبق توضيحاتي كه دادم، به اين صورت عمل مي كنيم:
; ( ( s12 = sqrt ( pow ( B.x - A.x, 2 ) + pow ( B.y - A.y, 2

بدين ترتيب طول خط AB را بدست آورديم (همان s12) محاسبه s23 و s31 (يا همان BC و AC) هم با خودتان، پس از محاسبه s23 و s31 قسمت اول كارمان تمام شده است... Surprised

2. حالا بايد محل تلاقي سه نيمساز را بدست آوريم. به اين ترتيب كه از يك ضلع شروع مي كنيم و مختصات هر نقطه را در برآيند طول خط روبروي آن نقطه ضرب مي كنيم و در آخر جواب را بر مجموع طول اضلاع مثلث (پريم يا همان Perim) تقسيم مي كنيم و به اين ترتيب به طول و عرض نقطه تلاقي نيمسازها پي مي بريم. (بدون نياز به دانستن اندازه زاويه ها... Cool )
(توضيح رياضي)
توجه: از آنجايي كه بدست آوردن زاويه ها و اندازه درجه نيمسازها(وقتي زاويه ها را داشته باشيم اينكه ديگه كاري نداره...!... Very Happy Smile ) را نخواسته بوديد من هم تنبلي كردم و آنها را توضيح ندادم اما اگر به آنها هم احتياج داريد فقط كافيست كه بفرماييد... Surprised
بسيار خوب، تا اينجا كه از راحت هم ساده تر بود.(البته منهاي فرم نگارشي... Wink )

اين قسمت بسيار راحت است، تنها كاري كه بايد انجام بدهيد اين است كه طول و عرض هر نقطه را (جداگانه) در اندازه پاره خط روبرويش ضرب كنيد و حاصل تمام آنها را با هم (براي طول و عرض جدا) جمع كرده و بر مجموع اندازه تمام اضلاع مثلث (در اين مورد مي شود همان محيط مثلث) تقسيم كنيد تا طول و عرض نقطه اي كه مي خواهيم (محل تقاطع نيمسازها يا همان مركز دايره محاطي) را بدست بياوريم.
نكته: گفتم براي هر كدام بايد طول و عرض را جدا حساب كنيد، منظورم اينست كه براي مثال طول نقطه A را در اندازه خط s23 ضرب مي كنيم(براي B خط s31 و براي نقطه C خط s12 را) و عرض(يعني يكبار x و بار ديگر y را) آنرا هم همينطور و هر كدام از مختصات(طول و عرض) را جدا از هم نگه مي داريم نه اينكه همه را با هم ضرب و جمع كنيم! (تابلوئه، فقط مي خواستم مطمئن بشم كه كاملا واضح شده باشه...)
(منم خودمو كشتم با اين خنگ بازيا... رسوندن مطلب در يكي دو جمله، واقعا هنريه ها... Crying or Very sad ... اما خوب اينجوري اگه يه صفر كيلومتر رياضي هم اين مطلبو بخونه، مطلب دس گيرش ميشه... Surprised )
خوب حالا ما مختصات مركز دايره محاطي و در واقع، محل برخورد نيمسازهاي مثلث را پيدا كرده ايم... Surprised

(توضيح براي برنامه نويسي)
خوب حالا مي خواهيم برنامه را ادامه بدهيم، پس به بالاي كد برويد و يك داده ديگر از نوع Point بسازيد، با نام InCenter (فقط يك پيشنهاد است!)
طبق توضيحاتي كه در بخش توضيح رياضي داده شد، حالا بايد از يك ضلع شروع كنيم و طول و عرض هر كدام از راس هاي مثلث را به طور جداگانه در اندازه خط روبروي آن نقطه در مثلث، ضرب كنيم و بعد از اينكه اينكار را براي هر يك از راس ها انجام داديم، حاصل را بر مجموع اندازه هر سه ضلع مثلث (در اينجا همان محيط مثلث خواهد بود) تقسيم كرده و حاصل را در InCenter.x و InCenter.y كه هر كدام را جداگانه محاسبه كرده ايم قرار دهيم، براي نمونه طرز محاسبه InCenter.x را نشان مي دهم و InCenter.y را به عهده خودتان مي گذارم:
نكته: Perim همان مجموع اندازه اضلاع مثلث است كه براي خواناتر شدن برنامه تان راه مناسبي است.(مي توانيد خودتان اينكار را براي هرجا كه مي خواهيد انجام بدهيد، اينها فقط مثال هاي كوچكي هستند كه برخي حالات مختلف را نشان مي دهند.)
;Perim = s12 + s23 + s31
;InCenter.x = ( s23 * A.x + s31 * B.x + s12 * C.x ) / Perim

نكته مهم: چون نمي خواستم با گذاشتن پرانتز، اين يك خط كد را زيادي شلوغ كنم پس از اين بهانه استفاده مي كنم و يك نكته پايه اي را (البته اميدوارم كه همه آنرا بدانند) هم يادآوري كنم و آن اينست كه عمل ضرب بر عمل جمع مقدم مي باشد...!...(چند لحظه مكس)... پس ابتدا تمام اعمال ضرب انجام مي شوند (مختصات طولي هر راس(يا نقطه) ضربدر طول خط روبرو) و سپس همه آنها با هم جمع مي شوند... هه، نكته مهم همين بود... همه مي دونستين، مگه نه... Embarassed ... Very Happy

3. براي بدست آوردن محل برخورد نيمساز با ضلع روبرو از همان فرمولي كه در قسمت دوم توضيح دادم استفاده كنيد، البته منهاي روابط مربوط به خود راس و ضلعي كه مختصات محل برخورد آنرا مي خواهيم.
(توضيح رياضي)
خوب حالا براي بدست آوردن مختصات محل برخورد هر نيمساز با ضلع روبرويش بايد تقريبا از رابطه اي مانند رابطه اي كه در قسمت دوم جواب، توضيح داده شد استفاده نماييم. با اين تفاوت كه بايد روابط مربوط به زاويه اي كه قرار است محل برخورد نيمسازش با ضلع روبرويي آن محاسبه شود را حذف كنيم. براي مثال زماني كه مي خواهيم محل برخورد نيمساز زاويه A را پيدا كنيم بايد عواملي را كه مربوط به مجهول ما (محل برخورد) مي شود را حذف كنيم و آن عوامل شامل ضرب مختصات نقطه مورد نظر (در اينجا A) و همچنين اندازه ضلعي كه مي خواهيم در تقسيم از آن استفاده كنيم مي شوند .(يعني براي بدست آوردن Perim، فقط دو ضلع مجاور راس مورد نظر (A) را با هم جمع مي كنيم و BC را با آنها جمه نمي كنيم (به خاطر اينكه نقطه مورد نظر روي همين خط قرار دارد))
(توضيح براي برنامه نويسي)
خوب حالا ما در برنامه فقط مختصات محل برخورد هر نيمساز با ضلع مقابلش را در اختيار نداريم كه الان آنرا هم محاسبه مي كنيم.
همانطور كه در بخش توضيح رياضي، عرض كردم بايد عواملي كه مستقيما با مجهول ما در اين قسمت ارتباط دارند را حذف كنيم... يعني فرمول ما در نهايت به اين شكل در مي آيد:
ابتدا يك متغير جديد تعريف كنيد (از نوع double) البته فقط اگر مي خواهيد مقدار قبلي Perim را داشته باشيد وگرنه مي توانيد دوباره روي همان پريم محسابات را انجام دهيد (بستگي به چگونگي ساختمان برنامه شما دارد)
;Perim = s12 + s23 + s31
;PerimBAC = s12 + s31
توجه(فقط براي روشن شدن بيشتر مطلب) : از Perim قبلي موردي كه با رنگ قرمز نمايش داده شده حذف مي شود و در PerimBAC قرار مي گيرد. اگر توجه بفرماييد متوجه مي شويد كه چيزي كه از اين قسمت حذف شده همان اندازه ضلع BC مثلث ما مي باشد...
;InCenter.x = ( s23 * A.x + s31 * B.x + s12 * C.x ) / Perim
;BCcol.x = ( s31 * B.x + s12 * C.x ) / PerimBAC

نكته: همانطور كه در ابتدا عرض كردم محل برخورد هر كدام از نيمسازها با ضلع مقابلشان هم نامگذاري شده اند پس در اينجا به جاي استفاده از BCcol.x مي توانيد متغيري بنام E داشته باشيد و طول (x) محل برخورد آنرا در E.x قرار بدهيد (بجاي BCcol.x)

توجه: من براي نمونه فقط طول مختصات را حساب كرده ام، فراموش نكنيد كه شما بايد عرض (ارتفاع يا y) آنراهم حساب نماييد.
توجه (فقط براي روشن شدن بيشتر مطلب): در اينجا هم متغير جديدي بنام BCcol (يعني محل برخورد بر روي خط BC) تعريف شده و تفاوت آن با فرمول بند 2 جواب هم با رنگ قرمز مشخص شده است. اگر دقت بفرماييد همانطور كه عرض كردم عواملي كه بطور مستقيم با مجهول ما در ارتباط هستند را حذف كرده ايم... يعني مختصات رأسي كه مي خواهيم مختصات محل برخورد آن با ضلع روبرويش را محاسب كنيم، ضربدر طول خط مقابل آن ضلع (كه در اينجا BC) مي باشد.

خوب پس تمام مجهولاتمان هم پيدا شدند، فقط از آنجا كه من به دايره محاطي اشاره كردم، فرمول محاسبه شعاع آنرا هم مي نويسم (بدون توضيح!)
;( ( r = 0.5 * ( sqrt ( ( 0 - s12 + s23 + s31 ) * ( 0 + s12 - s23 + s31 ) * ( 0 + s12 + s23 - s31 ) / Perim
(اگر دقت بفرماييد متوجه مي شويد فرمول آشنا است، پس احتياجي به توضيح هم نيست... Surprised )
نكته: من براي توضيح مجبور بودن فرمول ها را تماما بنويسم، Optimize كردن برنامه تان را به خودتان مي سپارم...
و از آنجايي كه اثبات فرمول ها را هم توضيح ندادم، پس برنامه كوچكي بجاي آن براي دوستان Upload مي كنم تا از درستي توضيحات خاطر جمع باشند (فقط فايل اجرايي... ساخت برنامه با خودتون... Idea )
http://www.sharemation.com/Curious/Triangle.zip
حجم فايل 146 كيلوبايت مي باشد.
نكته: مي توانيد با ماوس هر يك از رأس هاي مثلث (A, B, C) را تكان دهيد... Surprised


@مديران سايت:
فكر مي كنم اين مبحث بيشتر به تالار علوم ربط دارد تا به اصول اوليه ساخت بازي، پس لطفا اگر لازم مي بينيد آنرا به تالار علوم منتقل نماييد... Surprised

- موفق باشيد.

_________________
!Sometimes it is difficult to recognize the difference between worthless glass and priceless diamonds, specially about human beings
None of you humans seem to understand! I'm not logged in here with you! YOU'RE LOGGED IN HERE WITH ME
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
Ali
مدیر کل
مدیر کل


تاريخ عضويت: شنبه 20 تير 1383
تعداد ارسالها: 2983
محل سكونت: On the edge


3 شنبه 5 مهر 1384 - 23:01
پاسخ بصورت نقل قول
WOW ، عجب جواب کاملی... Shocked

نقل قول:

و از آنجايي كه اثبات فرمول ها را هم توضيح ندادم، پس برنامه كوچكي بجاي آن براي دوستان Upload مي كنم تا از درستي توضيحات خاطر جمع باشند (فقط فايل اجرايي... ساخت برنامه با خودتون... )
http://www.sharemation.com/Curious/Triangle.zip


بابا حوصله ... Shocked PDT_002



منتقل شد <----
علی

_________________
پی سی گیمرز - آرشيو بزرگ بازی های کامپیوتری
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
aakh1361
در حال رشد
در حال رشد


تاريخ عضويت: 5 شنبه 21 آبان 1383
تعداد ارسالها: 56
محل سكونت: تهران


شنبه 10 دي 1384 - 02:33
پاسخ بصورت نقل قول
كنجكاور بد تركوندي PDT_002 Very Happy Surprised

_________________
AAKH-1361.PersianBlog.Com

گروه طراي سيستم عامل

سايت سيستم عامل فارسي
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
منتظر سبز
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: 1 شنبه 31 ارديبهشت 1385
تعداد ارسالها: 437


جمعه 20 بهمن 1385 - 11:53
پاسخ بصورت نقل قول
انصافا عجب پاسخي Shocked
آدم علاقه مند ميشه از كنجكاو بيشتر بپرسه. Surprised
موفق باشيد

_________________
در اين انتظار. سبز خواهم ماند و بهار را خواهم ديد.
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
Ali
مدیر کل
مدیر کل


تاريخ عضويت: شنبه 20 تير 1383
تعداد ارسالها: 2983
محل سكونت: On the edge


جمعه 20 بهمن 1385 - 16:05
پاسخ بصورت نقل قول
یه سال و نیم پیش بود. یادش بخیر...

_________________
پی سی گیمرز - آرشيو بزرگ بازی های کامپیوتری
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
adib_f
پیر بازی سازی
پیر بازی سازی


تاريخ عضويت: 2 شنبه 16 آبان 1384
تعداد ارسالها: 895
محل سكونت: در بازي توپ قدرتي!


1 شنبه 29 بهمن 1385 - 19:53
پاسخ بصورت نقل قول
ايول من تازه اينجا رو ديدم
ادم چشماش اينطوري ميشه:
يكي اين: Shocked
ديگري هم اين: Confused
اين هم يك Sad

_________________
Free Download
Apps
Games
Movies
Songs
and cracks
all in:
www.soft2dl.com
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo نام كاربري در پيغامگير MSN
 

نمايش نامه هاي ارسال شده قبلي:   
ارسال يك موضوع جديد   پاسخ به يك موضوع    صفحه 1 از 1 تمام ساعات و تاريخها بر حسب 3.5+ ساعت گرينويچ مي باشد


 
پرش به:  


شما نمي توانيد در اين انجمن نامه ارسال كنيد.
شما نمي توانيد به موضوعات اين انجمن پاسخ دهيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن ويرايش كنيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن حذف كنيد
شما نمي توانيد در نظر سنجي هاي اين انجمن شركت كنيد


unity3d

بازگردانی به فارسی : علی کسایی @ توسعه مجازی کادوس 2004-2011
Powered by phpBB © 2001, 2011 phpBB Group
| Home | عضويت | ليست اعضا | گروه هاي كاربران | جستجو | راهنماي اين انجمن | Log In |