void Mirror (POINT *P, boolean SbX, boolean SbY) { if (SbX) { SetOrdinat(*P,-GetOrdinat(*P)); } if (SbY) { SetAbsis(*P,-GetAbsis(*P)); } } // Mencerminkan P yang bergantung pada nilai SbX atau SbY
void Putar (POINT *P, float Sudut) { float Radian,x,y; Radian=(Sudut*phi)/180; /* fungsi cos dan sin membaca dengan sudut radial bukan derajat */ x=GetAbsis(*P); y=GetOrdinat(*P); SetAbsis(*P,cos(Radian)*x - sin(Radian)*y); SetOrdinat(*P,sin(Radian)*x + cos(Radian)*y); } // P diputar sebesar Sudut derajat
POINT MirrorOf (POINT P, boolean SbX, boolean SbY) { POINT Point = P; if (SbX) { SetOrdinat(Point,-GetOrdinat(P)); } if (SbY) { SetAbsis(Point,-GetAbsis(P)); } return Point; } // Menghasilkan salinan P yang dicerminkan tergantung nilai SbX dan SbY
void setPoint(Plane *plane, Point point, int position) { SetAbsis(&((*plane).points.at(position)), GetAbsis(point)); SetOrdinat(&((*plane).points.at(position)), GetOrdinat(point)); }
void MasukProgram() { int a; float b,c; int d,e; scanf("%d",&a); switch (a) { case 1 : { BacaPOINT(&P1); break; } case 2 : { BacaPOINT(&P2); break; } case 3 : { TulisPOINT(P1); break; } case 4 : { TulisPOINT(P2); break; } case 5 : { TulisPOINT(plus(P1,P2)); break; } case 6 : { TulisPOINT(minus(P1,P2)); break; } case 7 : { printf("%.2f\n",dot(P1,P2)); break; } case 8 : { printf("%.2f\n",cross(P1,P2)); break; } case 9 : { if (IsOrigin(P1)) { printf("Ya\n"); } else { printf("Tidak\n"); } break; } case 10 : { if (IsOnSbX(P1)) { printf("Ya\n"); } else { printf("Tidak\n"); } break; } case 11 : { if (IsOnSbY(P1)) { printf("Ya\n"); } else { printf("Tidak\n"); } break; } case 12 : { if (EQ(P1,P2)) { printf("Ya\n"); } else { printf("Tidak\n"); } break; } case 13 : { if (NEQ(P1,P2)) { printf("Ya\n"); } else { printf("Tidak\n"); } break; } case 14 : { if (lebihkecil(P1,P2)) { printf("Ya\n"); } else { printf("Tidak\n"); } break; } case 15 : { if (lebihbesar(P1,P2)) { printf("Ya\n"); } else { printf("Tidak\n"); } break; } case 16 : { printf("Titik berada di kuadran %d\n",Kuadran(P1)); break; } case 17 : { TulisPOINT(NextX(P1)); break; } case 18 : { TulisPOINT(NextY(P1)); break; } case 19 : { scanf("%f %f",&b,&c); TulisPOINT(PlusDelta(P1,b,c)); break; } case 20 : { scanf("%d %d",&d,&e); TulisPOINT(MirrorOf(P1,d,e)); break; } case 21 : { printf("Jarak dari (0,0) adalah %.2f\n",Jarak0(P1)); break; } case 22 : { printf("Panjang P1 ke P2 adalah %.2f\n",Panjang(P1,P2)); break; } case 23 : { scanf("%f %f",&b,&c); Geser(&P1,b,c); break; } case 24 : { GeserKeSbX(&P1); break; } case 25 : { GeserKeSbY(&P1); break; } case 26 : { scanf("%d %d",&d,&e); Mirror(&P1,d,e); break; } case 27 : { scanf("%f",&b); Putar(&P1,b); break; } case 28 : { scanf("%d",&b); SetAbsis(P1,b); break; } case 29 : { scanf("%d",&b); SetOrdinat(P1,b); break; } case 30 : { keluar = true; break; } } }
int main(){ int i,h,DX,DY; float sudut; POINT ptest,p1,p2; srand(time(NULL)); ptest=MakePOINT(rand(),rand()); TulisPOINT(ptest); SetAbsis(&ptest,rand()); TulisPOINT(ptest); SetOrdinat(&ptest,rand()); TulisPOINT(ptest); BacaPOINT(&ptest); TulisPOINT(ptest); //cek operator relasional printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT(rand(),rand()); p2=MakePOINT(rand(),rand()); TulisPOINT(p1); printf("=="); TulisPOINT(p2); printf("="); h=EQ(p1,p2); printf("%x\n",h); } printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT(rand(),rand()); p2=p1; TulisPOINT(p1); printf("=="); TulisPOINT(p2); printf("="); h=EQ(p1,p2); printf("%x\n",h); } printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT(rand(),rand()); p2=MakePOINT(rand(),rand()); TulisPOINT(p1); printf("!="); TulisPOINT(p2); printf("="); h=NEQ(p1,p2); printf("%x\n",h); } printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT(rand(),rand()); p2=p1; TulisPOINT(p1); printf("!="); TulisPOINT(p2); printf("="); h=NEQ(p1,p2); printf("%x\n",h); } printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT(rand(),rand()); TulisPOINT(p1); printf("is Origin"); printf("="); h=IsOrigin(p1); printf("%x\n",h); } p1=MakePOINT(0,0); TulisPOINT(p1); printf("is Origin"); printf("="); h=IsOrigin(p1); printf("%x\n",h); printf("\n\ncek\n"); p1=MakePOINT(0,rand()); TulisPOINT(p1); printf("is Origin"); printf("="); h=IsOrigin(p1); printf("%x\n",h); printf("\n\ncek\n"); p1=MakePOINT(rand(),0); TulisPOINT(p1); printf("is Origin"); printf("="); h=IsOrigin(p1); printf("%x\n",h); printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT(rand(),rand()); TulisPOINT(p1); printf("is On SbX"); printf("="); h=IsOnSbX(p1); printf("%x\n",h); } p1=MakePOINT(0,0); TulisPOINT(p1); printf("is SbX"); printf("="); h=IsOnSbX(p1); printf("%x\n",h); p1=MakePOINT(0,rand()); TulisPOINT(p1); printf("is SbX"); printf("="); h=IsOnSbX(p1); printf("%x\n",h); p1=MakePOINT(rand(),0); TulisPOINT(p1); printf("is SbX"); printf("="); h=IsOnSbX(p1); printf("%x\n",h); printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT(rand(),rand()); TulisPOINT(p1); printf("is On SbY"); printf("="); h=IsOnSbY(p1); printf("%x\n",h); } p1=MakePOINT(0,0); TulisPOINT(p1); printf("is SbY"); printf("="); h=IsOnSbY(p1); printf("%x\n",h); p1=MakePOINT(0,rand()); TulisPOINT(p1); printf("is SbY"); printf("="); h=IsOnSbY(p1); printf("%x\n",h); p1=MakePOINT(rand(),0); TulisPOINT(p1); printf("is SbY"); printf("="); h=IsOnSbY(p1); printf("%x\n",h); printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT(rand()-rand(),rand()-rand()); printf("kuadran "); TulisPOINT(p1); printf("="); h=Kuadran(p1); printf("%d\n",h); } printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT(rand(),rand()); printf("NextX "); TulisPOINT(p1); printf("="); TulisPOINT(NextX(p1)); printf("\n"); } printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT(rand(),rand()); printf("NextY "); TulisPOINT(p1); printf("="); TulisPOINT(NextY(p1)); printf("\n"); } printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT(rand()-rand(),rand()-rand()); TulisPOINT(p1); DX=rand()%10; DY=rand()%10; printf(" + (%d,%d) =",DX,DY); TulisPOINT(PlusDelta(p1,DX,DY)); printf("\n"); TulisPOINT(p1); printf(" + (%d,%d)g =",DX,DY); Geser(&p1,DX,DY); TulisPOINT(p1); printf("\n"); } printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT(rand()-rand(),rand()-rand()); printf("MirrorOf("); TulisPOINT(p1); printf(",1,0) ="); TulisPOINT(MirrorOf(p1,1,0)); printf("\n"); } for (i=0;i<14;i++){ p1=MakePOINT(rand()-rand(),rand()-rand()); printf("MirrorOf("); TulisPOINT(p1); printf(",0,1) ="); TulisPOINT(MirrorOf(p1,0,1)); printf("\n"); } for (i=0;i<14;i++){ p1=MakePOINT(rand()-rand(),rand()-rand()); printf("MirrorOf("); TulisPOINT(p1); printf(",1,1) ="); TulisPOINT(MirrorOf(p1,1,1)); printf("\n"); } printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT((rand()-rand())%10,(rand()-rand())%10); printf("Jarak0("); TulisPOINT(p1); printf(") = %f",Jarak0(p1)); printf("\n"); } printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT((rand()-rand())%10,(rand()-rand())%10); p2=MakePOINT((rand()-rand())%10,(rand()-rand())%10); printf("Panjang("); TulisPOINT(p1); printf(","); TulisPOINT(p2); printf(") = %f",Panjang(p1,p2)); printf("\n"); } printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT((rand()-rand())%10,(rand()-rand())%10); TulisPOINT(p1); printf("digeser ke Sb-X menjadi "); GeserKeSbX(&p1); TulisPOINT(p1); printf("\n"); } printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT((rand()-rand())%10,(rand()-rand())%10); TulisPOINT(p1); printf("digeser ke Sb-Y menjadi "); GeserKeSbY(&p1); TulisPOINT(p1); printf("\n"); } printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT((rand()-rand())%10,(rand()-rand())%10); TulisPOINT(p1); printf("dicerminkan dengan Sb-X menjadi "); Mirror(&p1,1,0); TulisPOINT(p1); printf("\n"); } for (i=0;i<14;i++){ p1=MakePOINT((rand()-rand())%10,(rand()-rand())%10); TulisPOINT(p1); printf("dicerminkan dengan Sb-Y menjadi "); Mirror(&p1,0,1); TulisPOINT(p1); printf("\n"); } for (i=0;i<14;i++){ p1=MakePOINT((rand()-rand())%10,(rand()-rand())%10); TulisPOINT(p1); printf("dicerminkan dengan (0,0) menjadi "); Mirror(&p1,1,1); TulisPOINT(p1); printf("\n"); } printf("\n\ncek\n"); for (i=0;i<14;i++){ p1=MakePOINT((rand()-rand())%10,(rand()-rand())%10); sudut=(float) (rand()%360); TulisPOINT(p1); printf("diputar %0.0f derajat menjadi ",sudut); Putar(&p1,sudut); TulisPOINT(p1); printf("\n"); } printf("M_PI=%f\n",M_PI); return 0; }
POINT minus (POINT P1, POINT P2) { POINT P; SetAbsis(P,GetAbsis(P1)-GetAbsis(P2)); SetOrdinat(P,GetOrdinat(P1)-GetOrdinat(P2)); return P; } // Menghasilkan POINT yang bernilai P1-P2 dengan spesifikasi pengurangan dua buah POINT
/* KELOMPOK OPERASI ARITMATIKA TERHADAP TYPE */ POINT plus (POINT P1, POINT P2) { POINT P; SetAbsis(P,GetAbsis(P1)+GetAbsis(P2)); SetOrdinat(P,GetOrdinat(P1)+GetOrdinat(P2)); return P; } // Menghasilkan POINT yang bernilai P1+P2 dengan operasi penjumlahan vector
/* KELOMPOK INTERAKSI DENGAN I/O DEVICE, BACA/TULIS */ void BacaPOINT (POINT *P) { float x,y; scanf("%f %f",&x,&y); SetAbsis((*P),x); SetOrdinat((*P),y); } // Membaca nilai absis dan ordinat dari keyboard dan membentuk POINT P
void GeserKeSbX (POINT *P) { SetOrdinat(*P,0); } // P digeser ke sumbu X
void Geser (POINT *P, float deltaX, float deltaY) { SetAbsis(*P,GetAbsis(*P)+deltaX); SetOrdinat(*P,GetAbsis(*P)+deltaY); } // P digeser sebesar deltaX dan deltaY
/* KONSTRUKTOR MEMBENTUK POINT */ POINT MakePOINT (float X, float Y) { POINT P; SetAbsis(P,X); SetOrdinat(P,Y); return P; } // Membentuk sebuah POINT dari komponen-komponennya