تبلیغات
تبلیغات متنی
آموزشگاه آرایشگری مردانه شفیع رسالت
دکتر علی پرند فوق تخصص جراحی پلاستیک
بهترین دکتر پروتز سینه در تهران
محبوبترینها
چگونه اینورتر های صنعتی را عیب یابی و تعمیر کنیم؟
جاهای دیدنی قشم در شب که نباید از دست بدهید
سیگنال سهام چیست؟ مزایا و معایب استفاده از سیگنال خرید و فروش سهم
کاغذ دیواری از کجا بخرم؟ راهنمای جامع خرید کاغذ دیواری با کیفیت و قیمت مناسب
بهترین ماساژورهای برقی برای دیسک کمر در بازار ایران
بهترین ماساژورهای برقی برای دیسک کمر در بازار ایران
آفریقای جنوبی چگونه کشوری است؟
بهترین فروشگاه اینترنتی خرید کتاب زبان آلمانی: پیک زبان
با این روش ساده، فروش خود را چند برابر کنید (تستشده و 100٪ عملی)
سفر به بالی؛ جزیرهای که هرگز فراموش نخواهید کرد!
خصوصیات نگین و سنگ های قیمتی از نگاه اسلام
صفحه اول
آرشیو مطالب
ورود/عضویت
هواشناسی
قیمت طلا سکه و ارز
قیمت خودرو
مطالب در سایت شما
تبادل لینک
ارتباط با ما
مطالب سایت سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون
مطالب سایت سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون
آمار وبسایت
تعداد کل بازدیدها :
1865322778


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