پرچم تشریفات با کیفیت بالا و قیمت ارزان
پرواز از نگاه دکتر ماکان آریا پارسا
دکتر علی پرند فوق تخصص جراحی پلاستیک
تجهیزات و دستگاه های کلینیک زیبایی
سررسید تبلیغاتی 1404 چگونه میتواند برندینگ کسبوکارتان را تقویت کند؟
چگونه با ثبت آگهی رایگان در سایت های نیازمندیها، کسب و کارتان را به دیگران معرفی کنید؟
بهترین لوله برای لوله کشی آب ساختمان
دانلود آهنگ های برتر ایرانی و خارجی 2024
ماندگاری بیشتر محصولات باغ شما با این روش ساده!
بارشهای سیلآسا در راه است! آیا خانه شما آماده است؟
بارشهای سیلآسا در راه است! آیا خانه شما آماده است؟
قیمت انواع دستگاه تصفیه آب خانگی در ایران
نمایش جنگ دینامیت شو در تهران [از بیوگرافی میلاد صالح پور تا خرید بلیط]
9 روش جرم گیری ماشین لباسشویی سامسونگ برای از بین بردن بوی بد
ساندویچ پانل: بهترین گزینه برای ساخت و ساز سریع
مطالب سایت سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون
تعداد کل بازدیدها :
1850822708
محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++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; }
این صفحه را در گوگل محبوب کنید
محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++c --محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++c the_king 24 خرداد 1388, 11:36فرض کنیم که چند نقطه متمایز ...
محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++c - محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++c --محاسبه و ترسیم انواع اتصال چند ... وجهی : int m_sides; مختصات ...
مقایسه دو رشته با هم (حساس به بزرگی و کوچکی حروف) در زبان اسمبلی --مقایسه دو رشته با هم (حساس به بزرگی و ... محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++c -.
مقایسه دو رشته با هم (حساس به بزرگی و کوچکی حروف) در زبان اسمبلی - · چگونگي zoom روي تصوير يا فيلم - · محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++c - ...
مقایسه دو رشته با هم (حساس به بزرگی و کوچکی حروف) در زبان اسمبلی - · چگونگي zoom روي تصوير يا فيلم - · محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++c - ...
محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++c - · چگونگي zoom روي تصوير يا فيلم - · مقایسه دو رشته با هم (حساس به بزرگی و کوچکی حروف) در زبان اسمبلی - ...
محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++c - · دعوت به همکاری در تیم دیتالایف انجین فارسی - · درخواست vps - · نمایش اعداد 32 بیتی بصورت مبنای 16 در زبان ...
محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++c - · چگونگي zoom روي تصوير يا فيلم - · مقایسه دو رشته با هم (حساس به بزرگی و کوچکی حروف) در زبان اسمبلی - ...
مقایسه دو رشته با هم (حساس به بزرگی و کوچکی حروف) در زبان اسمبلی - · چگونگي zoom روي تصوير يا فيلم - · محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++c - ...
19 ژوئن 2009 – چطورین ؟ :oops: آقا من یه چند تا Blue Print با کیفیت از انسانهای مختلف ( چاغ , لاغر , ماهیچه ی و . ... محاسبه و ترسیم انواع اتصال چند وجهی در زبان ++c - ...
-