typedef struct { int X; /* absis */ int Y; /* ordinat */ } POINT;
/* DEFINISI PROTOTIP PRIMITIF */
/*** Konstruktor membentuk POINT ***/ POINT MakePOINT (int X, int Y); /* Membentuk sebuah POINT dari komponen-komponennya dan mengirimkan sbg hasil */ /* dari fungsi: return PTemp dengan PTemp.X=X dan PTemp.Y=Y dan PTemp adalah sebuah variabel lokal bertype POINT */
/*** Selektor POINT ***/
int Absis (POINT P); /*Mengirimkan komponen Absis dari P: return (P.X) */ int Ordinat (POINT P); /* Mengirimkan komponen Ordinat dari P POINT : return (P.Y) */ /*** Destruktor/Dealokator: tidak perlu ***/
/**** KELOMPOK Interaksi dengan I/O device, BACA/TULIS ****/
void BacaPOINT (POINT * P); /* Bacapoint(x,y,P) membentuk P dari x dan y yang dibaca */ /* baca nilai x dan y (variabel lokal), kemudian (*P).X=x; (*P).Y=y; */ void TulisPOINT (POINT P); /* Nilai P ditulis ke layar dg format "(X,Y) " */
/* KELOMPOK OPERASI ARITMATIKA TERHADAP TYPE */
POINT Plus (POINT P1, POINT P2); /* Menghasilkan salinan P yang berisi P1+P2 */ /* Melakukan operasi penjumlahan vektor */ /* buat Ptemp adalah variabel lokal */ /* Ptemp.X=P1.X+P2.X; Ptemp.Y=P1.Y+P2.Y; return Ptemp*/
POINT Minus (POINT P1, POINT P2);
/* Menghasilkan P1-P2 */
POINT DotProduct (POINT P1, POINT P2);
/* Operasi perkalian P1.P2, Melakukan operasi dot product */ POINT CrossProduct (POINT P1, POINT P2); /* Operasi perkalian P1xP2, Melakukan operasi cross product */
/*** Kelompok operasi relasional terhadap POINT */
W02-S1S2S3 ADT Point Hal. 1 dari 3
boolean EQ (POINT P1, POINT P2); /*Mengirimkan true jika P1 = P2 : return (P1.X=P2.X) and (P1.Y=P2.Y) */ boolean NEQ (POINT P1, POINT P2); /*Mengirimkan true jika P1 tidak sama dengan P2 */ boolean LT (POINT P1, POINT P2); /*Mengirimkan true jika P1 < P2. */ /* Definisi lebih kecil: lebih "kiri-bawah" dalam bidang kartesian */ boolean GT (POINT P1, POINT P2); /*Mengirimkan true jika P1 > P2. */ /* Definisi lebih besar: lebih "kanan-atas" dalam bidang kartesian */
/* ** Kelompok menentukan di mana P berada */
boolean IsOrigin (POINT P); /* Menghasilkan true jika P adalah titik origin */ /* return (P.X=0) and (P.Y=0) */
boolean IsOnSbX (POINT P);
/* Menghasilkan true jika P terletak Pada sumbu X */ /* return (P.Y=0) */
boolean IsOnSbY (POINT P);
/* Menghasilkan true jika P terletak pada sumbu Y */
int Kuadran (POINT P);
/* Menghasilkan kuadran dari P: 1,2,3, atau 4 */ /* Precondition : P bukan Titik Origin, */ /* dan P tidak terletak di salah satu sumbu */
/* ** KELOMPOK OPERASI LAIN TERHADAP TYPE */
POINT NextX (POINT P); /* Mengirim salinan P dengan absis ditambah satu */ /* Ptemp adalah variabel lokal */ /* Ptemp.X=P.X+1; Ptemp.Y=P.Y; return Ptemp; */
POINT NextY (POINT P);
/* Mengirim salinan P dengan ordinat ditambah satu */ POINT PlusDelta (POINT P, int DeltaX, int DeltaY); /* Mengirim salinan P yang absisnya = Absis(P)+DeltaX dan */ /* Ordinatnya adalah Ordinat(P)+ DeltaY */ POINT MirrorOf (POINT P, boolean SbX, boolean SbY); /* Menghasilkan salinan P yang dicerminkan */ /* tergantung nilai SbX dan SBY */ /* Jika SbX bernilai true, maka dicerminkan thd Sumbu X */ /* Jika SbY bernilai true, maka dicerminkan thd Sumbu Y */ float Jarak0 (POINT P); /* Menghitung jarak P ke (0,0) */ POINT HslGeser (POINT P, int Deltax, int deltaY); /*Menghasilkan P yang sudah digeser ordinatnya sebesar DeltaX */ /* dan ordinatnya sebesar Delta Y */ /* Ptemp adalah variabel lokal */ /* Ptemp.X=P.X+Deltax; Ptemp.Y=P.Y+deltaY; return Ptemp; */
void Geser (POINT * P, int Deltax, int deltaY);
/*I.S. P terdefinisi */ /*F.S. P digeser sebesar DeltaX dan ordinatnya sebesar Delta Y */ /* (*P).X= (*P).X + Deltax; (*P).Y= (*P).Y + DeltaY; */
W02-S1S2S3 ADT Point Hal. 2 dari 3
void GeserKeSbX (POINT * P); /*I.S. P terdefinisi */ /*F.S. P di Sumbu X dg absis sama dg absis semula. /* Proses :tergeser Ke Sumbu X. */ /* Contoh: Jika koordinat semula(9,9) menjadi (9,0) */ void GeserKeSbY (POINT * P); /*I.S. P terdefinisi */ /*F.S. P di Sumbu Y dengan absis yang sama dengan semulai */ /* P digeser Ke Sumbu Y. */ /* Contoh: Jika koordinat semula(9,9) menjadi (0,9) */ void Mirror (POINT * P, boolean SbX, boolean SbY); /*I.S. P terdefinisi */ /*F.S. P dicerminkan tergantung nilai SbX atau SBY */ /* Jika SbX true maka dicerminkan terhadap Sumbu X */ /* Jika SbY true maka dicerminkan terhadap Sumbu Y */
void Putar (POINT * P, float Sudut);
/*I.S. P terdefinisi */ /*F.S. P diputar sebesar (Sudut) derajat */ #endif