PDA

View Full Version : درخواست کمک : رسم مکعب با داشتن مختصات 2 راس متقابل آن



amirpub
شنبه 01 اسفند 1388, 19:11 عصر
سلام دوستان
نیاز به برنامه ای دارم که مختصات دو راس متقابل یک مکعب در فضای سه بعدی (به صورت i و j و k) را به عنوان ورودی دریافت کند و مختصات 6 راس دیگر را مشخص و مکعب مربوه را رسم کند.

مثلا اگر راس های این مکعب را A,B,C,D,E,F,G,H در نظر بگیریم، فرض کنید A و E را به عنوان ورودی دریافت کنیم؛ مطلوب بدست آوردن 6 راس دیگر و در نهایت رسم مکعب بر اساس 8 راس بدست آمده است.

حتی اگر در قسمتی از این برنامه (چه در الگوریتم و کد عملیات برنامه و چه در چگونگی رسم و کدهای مربوط به رسم مکعب) مرا راهنمایی کنید از شما پیشاپیش سپاسگزار هستم.

ali.aghdam
شنبه 01 اسفند 1388, 19:48 عصر
میشه ترتیب چیدمان راس هاتون رو روی شکل توضیح بدید تا بشه طراحیش کرد.

پیشنهاد: به نظر بنده این برنامه رو با WPF بنویسید خیلی بهتره و باعث حرفه ای جلوه دادن برنامه و برنامه نویسش میشه .

Saeed.Masoumi
یک شنبه 02 اسفند 1388, 00:55 صبح
سلام دوست عزیز
توجه کنید
"اگر V یک مکعب در فضای سه بعدی باشد و A , B دو راس از V باشند آنگاه A , B متقابل هستند"
یعنی در شکل زیر

http://barnamenevis.org/forum/attachment.php?attachmentid=44425&stc=1&d=1266701686

A , H هم متقابل هستند
A , C هم متقابل هستند
A , G هم متقابل هستند
نتیجه:
با داشتن تنها 2 راس از 8 راس نمی توان به یک مکعب یکتا رسید.
به الگوریتم زیر دقت کن:


A=Vector(xa,ya,za);
B=Vector(xb,yb,zb);
C=Vector(xc,yc,zc);
D=Vector(xd,yd,zd);
E=Vector(xe,ye,ze);
F=Vector(xf,yf,zf);
G=Vector(xg,yg,zg);
H=Vector(xh,yh,zh);
int Edge=0;
void InitilizeEdge(Vector K,Vector W)
{
if(K.z==W.z) //they are in same page
{
if(K.x==W.x)
Edge=Abs(K.y-W.y);
if(K.y==W.y)
Edge=Abs(K.x-W.x);
}
else
Edge=Abs(K.z-W.z);
}

حالا فقط کافی چک کنی ببینی موقعیت راس W و K متناسب با کدوم یکی از رئوس A..H است.
با چککردن طول و عرض و عمق K , W با یکدیگر .اما با فرض که شما توانستید تشخیص دهید (مثلا) K می تواند نقش A را (در شکل) بازی کند و با فرض اینکه W هم (مثلا) متناظر با B شد.
و چون حجم مکعب است لذا طول و عرض و عمق برابر با Edge است.
حالا کافیست مشخصات K , W را با استفاده از Edge تغییر دهید تا به رئوس دیگر برسید.
اما سناریو دیگر:
فرض کنید که W , K به ترتیب برابر با A , E باشد انگاه چگونه متوجه می شوید که A, H نبوده است ؟کدام شکل را رسم کنید؟
راهنمایی:اگر به فرض A , H باشد باید اینقدر با مختصات بازی کنید تا متوجه شوید کدام دو راس را در اختیار دارید (چون فاصله ها در مکعب ثابت است)
تازه اگر شما مکعب را رسم کنید به فرض از کجا معلوم شما A را درست در نظر گرفته اید ؟؟می توان مکعب درگری را رسم کرد که آن راسی که شما A در نظر گرفته اید در این مکعب جدید B باشد.(شکل یکتا نمی توان رسم کرد)
و....
لذا شما نمی توانید با داشتن دو راس یک مکعب یکتا رسم کنید.