واضح آرشیو وب فارسی:سایت ریسک: دوران دادن يك شكل درمحيط سي پلاس پلاس گلبن مستور 14 فروردين 1386, 11:37سلام من مي خوام يك شكل را در سي پلاس دوران بدم به طوري كه تا زماني كه كليدي فشار داده نشده دوران شكل قابل مشاهده باشد البته نمي خوام از توابع موجود در اين محيط استفاده كنم و يك الگوريتم مي خوام چون الگوريتم خودم جواب نداد راهنمايي كنيد مرسي MnavidM 15 فروردين 1386, 10:27خوب برای شکل های مختلف فرق داره، چون دستور های اون ها فرق داره . الگوریتمش مشکل نیست ، الگوریتم شما در چه قشمتی مشکل دارد ؟ گلبن مستور 16 فروردين 1386, 14:49سلام من خودم راه دوران دادن را پيدا كردم ولي اين نشدجواب ها كه سر آدم رو به طاق بكوبيد خوب من شكلم را با نقاط يك ماتريس مي كشم و با تابع زير دوران مي دهم float points [3][11]= {{300,500,500,100,100,300,300,200,400,300,300},{25 0,250,150,350,250,250,50,50,450,450,250},{1,1,1,1, 1,1,1,1,1,1,1}}; void rotate(float an) { float angle , tx , ty ; angle = an *(22.0/7.0)/180.0; for (int i = 0 ; i<11 ; i++) { tx = points[0][i]; ty = points[1][i]; points[0][i] = (tx-300)*cos(angle)-(ty-250)*sin(angle)+300; points[1][i] = (tx-300)*sin(angle)+(ty-250)*cos(angle)+250; } } ولي با اين حال به خاطر اينكه تاپيك من را هم باز كرديد مرسي MnavidM 16 فروردين 1386, 23:27دوست عزیز سر به طاق کوبیدن چیه ؟ سوال شما نه گفتید از چه دستوری برای رسم استفاده می کنید و نه توضیحی در مورد کارتون دادید . من که نمی تونم ذهن شما رو بخونم. به هر حال خوشحالم که به جوابتون رسیدید. موفق باشید. گلبن مستور 17 فروردين 1386, 00:52سلام اين برنامه ايه كه يك بمب داخل آب ميفته و از بالا آب اين اتفاق ميفته پس نياز دارم به اينكه هم شكل را كه با نقاط يك ماتريس (آرايه سه بعدي) هم دوران بدم و هم انتقال دهم چوناگه انتقال ندم بمب من مرتب دور خودش مي چرخه و داخل آب نميفته ولي موقع دوران يافتن دو تا نقطه آخر شكل را بهم وصل نمي كنه يه ايرادي هست توي برنامه من كه مي خام لطف كنيد و اون را يكبار اجرا كنيد تا مشكل منو ببينيد بمب من هم حركت مي كنه و هم مي چرخه فقط موقع حركت كردن و چرخيدن دو نقطه آخر شكل را درست رسم نمي كنه اون را لطفا اجرا كنيد و بهم بگيد چرا اين اتفاق ميفته لطفا كمكم كنيد مرسي كد را مي ذارم #include<iostream.h> #include<stdio.h> #include<math.h> #include<stdlib.h> #include<conio.h> #include<dos.h> #include<graphics.h> float points[3][13] = {{20,20,15,20,20,40,55,100,125,100,55,40,20 },{50,40,35,30,20,30,20,20,35,50,50,40,50 },{1,1,1,1,1,1,1,1,1,1,1,1,1 }}; points1[3][16]={{20,60,100,140,180,220,260,300,340,380,420,460,5 00,540,580,620},{400,400,400,400,400,400,400,400,4 00,400,400,400,400,400,400,400},{1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1}}; points2[3][16]={{0,40,80,120,160,200,240,280,320,360,400,440,480 ,520,560,600},{425,425,425,425,425,425,425,425,425 ,425,425,425,425,425,425,425},{1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1}}; class bomb { private: float pi; public: bomb(); void myline(float x1, float y1 , float x2 , float y2, int c); void b_move(int a , int b); void rotate(float an , float x, float y); void b_draw(int c); }; void bomb::bomb() { pi = 4*tan(1); b_draw(15); } void bomb::myline(float x1, float y1 , float x2 , float y2, int c ) { float y; if ((x2-x1)==0 ||(x2<x1) ||(y2<y1)) line( x1 , y1 , x2 , y2); else { float m = (y2-y1)/(x2-x1); float b = y2-m*x2; for (float x = x1 ; x<=x2 ; x+=0.01) { y = m * x +b; putpixel(x,y,c); } } } void bomb::b_draw(int c) { for(float a = 0 ; a<12 ; a++) myline(points[0][a],points[1][a],points[0][a+1],points[1][a+1], c); } void bomb::b_move (int a, int b) { float newpoints[3][13]; int t[3][3] ={{1,0,a},{0,1,b},{0,0,1}}; for (int i =0 ; i <3 ;i++) for (int j = 0 ; j<13 ; j++) { newpoints[i][j] = 0; for (int k =0 ; k<3 ; k++) newpoints[i][j] += t[i][k]*points[k][j]; } for(i =0 ; i<3 ; i++) for(j =0 ; j<13; j++) points[i][j] = newpoints[i][j]; } void bomb::rotate(float an , float x , float y) { float angle , tx , ty ; angle = an *(22.0/7.0)/180.0; for (int i = 0 ; i<11 ; i++) { tx = points[0][i]; ty = points[1][i]; points[0][i] = (tx-x)*cos(angle)-(ty-y)*sin(angle)+y; points[1][i] = (tx-x)*sin(angle)+(ty-y)*cos(angle)+x; } } void w_draw(float xc , float yc , float r) { for (float x =-r ; x<=r ; x+=0.01) { float y = sqrt(r*r - x*x); putpixel(x+xc , yc+y , 9); } } void wave() { for(int k = 0 ; k<16 ; k++) w_draw(points1[0][k],points1[1][k],20); for(int j = 0 ; j<16 ; j++) w_draw(points2[0][j],points2[1][j],20); } void main() { int gd = DETECT , gm ; initgraph(&gd , &gm , "C:RedLanguageTCBGI"); int ec = graphresult(); if (ec !=0) { cout<<"Graph Error "<<grapherrormsg(ec); getch(); exit(0); } wave(); bomb act; do { delay(200); act.b_draw(15); setcolor(0); act.b_draw(0); act.b_move(10,20); act.rotate(5, points[0][5], points[1][5]); setcolor(15); } while(!kbhit()); getch(); closegraph(); }
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 3917]