تور لحظه آخری
امروز : جمعه ، 15 تیر 1403    احادیث و روایات:  امام علی (ع):روزه پرهيز از حرامها است همچنانكه شخص از خوردنى و نوشيدنى پرهيز مى‏كند.
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها

تبلیغات

تبلیغات متنی

اتاق فرار

خرید ووچر پرفکت مانی

تریدینگ ویو

کاشت ابرو

لمینت دندان

ونداد کولر

صرافی ارکی چنج

صرافی rkchange

دانلود سریال سووشون

دانلود فیلم

ناب مووی

رسانه حرف تو - مقایسه و اشتراک تجربه خرید

سرور اختصاصی ایران

تور دبی

دزدگیر منزل

تشریفات روناک

اجاره سند در شیراز

قیمت فنس

armanekasbokar

armanetejarat

صندوق تضمین

پیچ و مهره

طراحی کاتالوگ فوری

دانلود کتاب صوتی

تعمیرات مک بوک

Future Innovate Tech

آموزشگاه آرایشگری مردانه شفیع رسالت

پی جو مشاغل برتر شیراز

قیمت فرش

آموزش کیک پزی در تهران

لوله بازکنی تهران

میز جلو مبلی

هتل 5 ستاره شیراز

آراد برندینگ

رنگ استخری

سایبان ماشین

قالیشویی در تهران

مبل استیل

بهترین وکیل تهران

شرکت حسابداری

نظرسنجی انتخابات 1403

استعداد تحلیلی

کی شاپ

خرید دانه قهوه

دانلود رمان

وکیل کرج

آمپول بیوتین بپانتین

پرس برک

بهترین پکیج کنکور

خرید تیشرت مردانه

خرید نشادر

خرید یخچال خارجی

وکیل تبریز

اجاره سند

وام لوازم خانگی

نتایج انتخابات ریاست جمهوری

خرید سی پی ارزان

خرید ابزار دقیق

بهترین جراح بینی خانم

تاثیر رنگ لباس بر تعاملات انسانی

خرید ریبون

 






آمار وبسایت

 تعداد کل بازدیدها : 1804639436




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++c -


واضح آرشیو وب فارسی:سایت ریسک: محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++c the_king 24 خرداد 1388, 11:36فرض کنیم که چند نقطه متمایز داشته باشیم، با اتصال این نقاط به همدیگر یک چند وجهی ایجاد می شود. اما در کل چند شکل متفاوت چند وجهی را می توان با این نقاط ایجاد کرد، بطوریکه هر گره (نقطه) تنها به دو گره دیگر متصل گردد؟ برنامه زیر که توسط توابع گرافیکی ++Turbo C تحت DOS نوشته شده، این حالات متفاوت را محاسبه کرده و نمایش می دهد. کلاس shape وظیفه ذخیره سازی و نمایش مشخصات چند وجهی را دارد. #include "iostream.h" #include "conio.h" #include "graphics.h" class shape { private: int m_sides; int *pos_x,*pos_y; int m_width,m_height; int m_min_x,m_min_y; int m_x,m_y; int set_video_mode(); void set_text_mode(); void find_shapes(int *,int,int *,int *); void show_shape(int *,int *,int *); public: shape(int); ~shape(); void set_pos(int,int,int); void paint(int,int); void pause(); int get_x(); int get_y(); int get_width(); int get_height(); } shape::shape(int sides) { int i; if (sides<3) sides=3; m_sides=sides; pos_x=new int[m_sides]; pos_y=new int[m_sides]; for (i=0;i<m_sides;i++) { pos_x[i]=0; pos_y[i]=0; } m_x=0; m_y=0; m_width=0; m_height=0; } shape::~shape() { delete[] pos_x; delete[] pos_y; } void shape::set_pos(int index,int x,int y) { if ((index>=0) && (index<m_sides)) { pos_x[index]=x; pos_y[index]=y; } } int shape::set_video_mode() { int graphdriver=VGA; int graphmode=VGAHI; int errorcode; if (getgraphmode()>=0) return 1; if (getgraphmode()!=grNoInitGraph) return 0; initgraph(&graphdriver, &graphmode, ""); errorcode=graphresult(); if (errorcode==grOk) return 1; cout << endl << "Graphics Error : " << endl; cout << " " << grapherrormsg(errorcode) << endl; return 0; } void shape::set_text_mode() { closegraph(); } void shape::show_shape(int *nodes,int *x,int *y) { int i,j; setcolor(BLUE); setlinestyle(SOLID_LINE,0,NORM_WIDTH); rectangle(*x,*y,*x+m_width+9,*y+m_height+9); setcolor(WHITE); for (i=0;i<m_sides;i++) { if (i==m_sides-1) j=0; else j=i+1; line( *x+pos_x[nodes[i]]-m_min_x+5, *y+pos_y[nodes[i]]-m_min_y+5, *x+pos_x[nodes[j]]-m_min_x+5, *y+pos_y[nodes[j]]-m_min_y+5); } setcolor(RED); setfillstyle(SOLID_FILL,RED); for (i=0;i<m_sides;i++) pieslice( *x+pos_x[i]-m_min_x+5, *y+pos_y[i]-m_min_y+5, 0,360,2); *x+=m_width+11; if (*x>640-m_width-10) { *x=0; *y+=m_height+11; } } void shape::find_shapes(int *nodes,int index,int *x,int *y) { int pos,temp; if (index==m_sides) { if (nodes[m_sides-1]>nodes[1]) show_shape(nodes,x,y); return; } find_shapes(nodes,index+1,x,y); for (pos=index+1;pos<m_sides;pos++) { temp=nodes[pos]; nodes[pos]=nodes[index]; nodes[index]=temp; find_shapes(nodes,index+1,x,y); nodes[index]=nodes[pos]; nodes[pos]=temp; } } void shape::paint(int base_x,int base_y) { int x; int y; int min_x=pos_x[0]; int min_y=pos_y[0]; int max_x=pos_x[0]; int max_y=pos_y[0]; int *nodes; int i; if (set_video_mode()==0) return; setcolor(WHITE); settextstyle(SMALL_FONT,HORIZ_DIR,0); outtextxy(base_x,base_y,"All Styles of Shape :"); x=base_x; y=base_y+14; nodes=new int[m_sides]; for (i=0;i<m_sides;i++) { nodes[i]=i; if (pos_x[i]<min_x) min_x=pos_x[i]; else if (pos_x[i]>max_x) max_x=pos_x[i]; if (pos_y[i]<min_y) min_y=pos_y[i]; else if (pos_y[i]>max_y) max_y=pos_y[i]; } m_width=max_x-min_x+1; m_height=max_y-min_y+1; m_min_x=min_x; m_min_y=min_y; find_shapes(nodes,1,&x,&y); if (x==0) y=y-m_height-11; m_x=x; m_y=y+6; delete[] nodes; } void shape::pause() { setcolor(WHITE); settextstyle(SMALL_FONT,HORIZ_DIR,5); outtextxy(4,460,"Press ESC key to exit."); while (getch()!=27); set_text_mode(); } int shape::get_x() { return m_x; } int shape::get_y() { return m_y; } int shape::get_width() { return m_width; } int shape::get_height() { return m_height; } int main() { clrscr(); shape a(3),b(4),c(5),d(6); a.set_pos(0,0,0); a.set_pos(1,40,20); a.set_pos(2,0,40); a.paint(0,0); b.set_pos(0,0,0); b.set_pos(1,40,0); b.set_pos(2,40,40); b.set_pos(3,0,40); b.paint(0,a.get_y()+a.get_height()+11); c.set_pos(0,0,0); c.set_pos(1,40,0); c.set_pos(2,40,40); c.set_pos(3,20,60); c.set_pos(4,0,40); c.paint(0,b.get_y()+b.get_height()+11); d.set_pos(0,8,0); d.set_pos(1,22,0); d.set_pos(2,30,20); d.set_pos(3,22,40); d.set_pos(4,8,40); d.set_pos(5,0,20); d.paint(0,c.get_y()+c.get_height()+11); d.pause(); return 0; } کتابخانه گرافیکی EGAVGA.BGI و فونت LITT.CHR که برنامه برای اجرای صحیح به آنها نیاز دارد، به همراه کد کامل برنامه و فایل اجرایی EXE ضمیمه این پست می باشد. the_king 24 خرداد 1388, 12:22تعریف کتابخانه های بکار رفته در پروژه : #include "iostream.h" #include "conio.h" #include "graphics.h" تعریف کلاس : shape class shape { متغیر های خصوصی کلاس : private: تعداد نقاط (گره ها) در چند وجهی : int m_sides; مختصات طولی و عرضی هر یک از نقاط (دو آرایه پویا خواهند بود) : int *pos_x,*pos_y; طول و عرض کادر چند وجهی : int m_width,m_height; حداقل مختصاتی که نقاط خواهند داشت : int m_min_x,m_min_y; موقعیتی که چند وجهی ترسیم در آن خواهد شد : int m_x,m_y; تابعی که برای ورود به حالت گرافیکی اجرا می شود : int set_video_mode(); تابعی که برای برگشت به حالت متنی اجرا می شود : void set_text_mode(); این تابع به جستجوی حالتهای مختلف چند وجهی می پردازد : void find_shapes(int *,int,int *,int *); نمایش یک حالت خاص از چند وجهی : void show_shape(int *,int *,int *); توابع عمومی کلاس : shape public: تعریف تابع سازنده کلاس : shape(int); تعریف تابع نابود کننده کلاس : ~shape(); تعریف تابعی برای تعیین کردن مختصات نقاط : void set_pos(int,int,int); تعریف تابعی برای ترسیم تمامی حالت های چند وجهی : void paint(int,int); تعریف تابعی که منتظر فشار کلیدی از سوی کاربر و بازگشت به حالت متنی می شود : void pause(); تعریف تابعی که موقعیت x ترسیم حالت بعدی را دریافت می کند : int get_x(); تعریف تابعی که موقعیت ترسیم y حالت بعدی را دریافت می کند : int get_y(); تعریف تابعی که طول کادر چند وجهی را دریافت می کند : int get_width(); تعریف تابعی که عرض کادر چند وجهی را دریافت می کند : int get_height(); کد تابع سازنده کلاس : } shape::shape(int sides) { یک متغیر داخلی برای حلقه : int i; حداقل تعداد نقاط باید سه باشد وگرنه چند وجهی حاصل نمی شود : if (sides<3) وگرنه اگر تعداد نقاط کمتر از 3 بود، به زور کتک 3 شود : sides=3; تعداد نقاط در متغیر خصوصی کلاس ثبت شود : m_sides=sides; یک آرایه برای نگهداری مختصات x نقاط ایجاد شود : pos_x=new int[m_sides]; یک آرایه برای نگهداری مختصات y نقاط ایجاد شود : pos_y=new int[m_sides]; برای اولین تا آخرین نقطه چند وجهی... for (i=0;i<m_sides;i++) مقدار اولیه مختصات x و y را (0,0) می نماییم : { pos_x[i]=0; pos_y[i]=0; } و مختصات x و y ترسیم چند وجهی هم (0,0) شود : m_x=0; m_y=0; بدیهی است که طول و عرض یک چند وجهی که تمامی نقاط اش (0,0) است نیز 0 در 0 است : m_width=0; m_height=0; } کد تابع نابود کننده کلاس : shape::~shape() { حافظه آرایه هایی که برای نگهداری مختصات x و y نقاط چند وجهی ایجاد شده بود آزاد شود : delete[] pos_x; delete[] pos_y; } کد تابعی که مختصات یک نقطه از چند وجهی را دریافت می کند : void shape::set_pos(int index,int x,int y) { اگر اندیس (شماره) نقطه در آرایه های مختصات x و y نقاط قابل قبول بود... if ((index>=0) && (index<m_sides)) { مختصات x و y نقطه در آرایه های مربوطه ثبت شود : pos_x[index]=x; pos_y[index]=y; } } کد تابعی که برای ورود به حالت گرافیکی اجرا می شود : int shape::set_video_mode() { درایور گرافیکی VGA انتخاب شود : int graphdriver=VGA; و Mode گرافیکی 16 رنگی 640x480 انتخاب شود : int graphmode=VGAHI; یک متغیری که شماره خطای احتمالی را نگهداری خواهد کرد : int errorcode; اگر اکنون در حالت گرافیکی هستیم... if (getgraphmode()>=0) پس نیازی به ورود به حالت گرافیکی نیست و از تابع خارج خواهیم شد : return 1; ولی اگر ایجاد یک حالت گرافیکی با خطایی روبرو شود... if (getgraphmode()!=grNoInitGraph) از تابع خارج می شویم : return 0; در غیر اینصورت حالت گرافیکی را تنظیم می کنیم : initgraph(&graphdriver, &graphmode, ""); و شماره خطای احتمالی را می خوانیم : errorcode=graphresult(); اگر خطایی بروز نکرده باشد... if (errorcode==grOk) از تابع خارج می شویم : return 1; وگرنه یک پیغام بروز خطا را نمایش می دهیم : cout << endl << "Graphics Error : " << endl; و در ادامه متن خطای رخ داده را نمایش می دهیم : cout << " " << grapherrormsg(errorcode) << endl; و از تابع خارج می شویم : return 0; } the_king 27 خرداد 1388, 00:57کد تابعی که برای بازگشت از حالت گرافیکی به حالت متنی فراخوانی می شود : void shape::set_text_mode() { حالت گرافیکی را از بین می بریم : closegraph(); } کد تابعی برای نمایش یک حالت از چند وجهی : void shape::show_shape(int *nodes,int *x,int *y) { دو متغیر داخلی را برای استفاده در حلقه تعریف می کنیم : int i,j; ابتدا رنگ آبی را برای ترسیم کادر دور چند وجهی انتخاب می کنیم : setcolor(BLUE); شیوه ترسیم خط را روی حالت 1 پیکسلی ساده تنظیم می کنیم : setlinestyle(SOLID_LINE,0,NORM_WIDTH); و کادری را دور چند وجهی ترسیم می کنیم، بطوریکه در مجموع 9 پیکسل در طول و عرض از چند وجهی بزرگتر باشد : rectangle(*x,*y,*x+m_width+9,*y+m_height+9); رنگ سفید را برای ترسیم خطوط چند وجهی انتخاب می کنیم : setcolor(WHITE); از اولین تا آخرین نقطه از چند وجهی... for (i=0;i<m_sides;i++) { اگر نقطه اندیس i ام آخرین نقطه چند وجهی باشد... if (i==m_sides-1) نقطه بعدی را اندیس 0 ام (اولین نقطه) در نظر می گیریم : j=0; وگرنه... else نقطه بعدی را اندیس i + 1 ام در نظر می گیریم : j=i+1; در هر صورت، از نقطه اندیس i ام به نقطه بعدی (اندیس j ام) یک خط رسم می کنیم، 5+ برای آن است که چند وجهی به کادر پیرامون اش نچسبد و اندکی فاصله داشته باشد : line( *x+pos_x[nodes[i]]-m_min_x+5, *y+pos_y[nodes[i]]-m_min_y+5, *x+pos_x[nodes[j]]-m_min_x+5, *y+pos_y[nodes[j]]-m_min_y+5); } برای رسم کردن دایره نقاط (گره ها)، رنگ قرمز را انتخاب می کنیم : setcolor(RED); شیوه پر کردن را انتخاب می کنیم تا هنگام ترسیم دایره، داخل اش توخالی نباشد و پر شود : setfillstyle(SOLID_FILL,RED); از اولین تا آخرین نقطه چند وجهی... for (i=0;i<m_sides;i++) یک دایره کامل 360 درجه ای به شعاع 2 پیکسل را در مختصات نقطه اندیس i ام رسم می کنیم : pieslice( *x+pos_x[i]-m_min_x+5, *y+pos_y[i]-m_min_y+5, 0,360,2); برای ترسیم چند وجهی در حالت بعدی مختصات x را جلوتر می بریم (به سمت راست) : *x+=m_width+11; اگر از کادر صفحه 640x480 پیکسلی خارج شده ایم... if (*x>640-m_width-10) { به مختصات 0 افقی بر گشته و پایین تر می رویم : *x=0; *y+=m_height+11; } } کد تابعی که به جستجوی حالتهای مختلف چند وجهی می پردازد : void shape::find_shapes(int *nodes,int index,int *x,int *y) { دو متغیر تعریف می کنیم که اولی یکی از نقاط چند وجهی را انتخاب کند و دومی برای تعویض مقدار آن نقطه با مقدار نقطه دیگر بکار رود : int pos,temp; اگر حالت جدیدی برای چند وجهی پیدا شده است... if (index==m_sides) { و اگر حالت پیدا شده تکراری نباشد... if (nodes[m_sides-1]>nodes[1]) آن حالت پیدا شده را ترسیم کن : show_shape(nodes,x,y); و از تابع خارج شو : return; } وگرنه برای جستجوی یک حالت جدید ادامه بده : find_shapes(nodes,index+1,x,y); از این نقطه اندیس index به بعد... for (pos=index+1;pos<m_sides;pos++) { مقدار نقطه را با نقطه index عوض کن : temp=nodes[pos]; nodes[pos]=nodes[index]; nodes[index]=temp; و پس از این جابجایی برای جستجوی یک حالت جدید ادامه بده : find_shapes(nodes,index+1,x,y); و در انتها مقدار نقطه عوض شده را به وضعیت قبلی اش برگردان : nodes[index]=nodes[pos]; nodes[pos]=temp; }




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 261]

bt

اضافه شدن مطلب/حذف مطلب







-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن