Minggu, 03 Oktober 2010

ADT Garis

BOOLEAN.H

#ifndef __boolean__
#define __boolean__
#define true 1
#define false 0
#define boolean unsigned char

#endif


GARIS.H

/* file : garis.h */
/* ADT point */

#ifndef garis_h
#define garis_h
#include "POINT.h"

/* contoh ADT yg memanfaatkan ADT lain */
/* garis dibentuk oleh duah buah point */

typedef struct
{
point paw; /* titik awal */
point pakh; /* titik akhir */
} garis;


/* definisi prototipe primitif */
/*** konstruktor membentuk garis ***/

void makegaris(point p1,point p2,garis *l);
/* I.S : p1 & p2 terdefinisi */
/* F.S : l terdefinisi dg l.paw=p1 & l.pakh=p2 */
/* membentuk sebuah garis l dari komponen-komponennya */

/*** selektor garis ***/
point getpaw (garis l);
/* mengirimkan komponen titik pertama dari l garis */

point getpakh(garis l);
/* mengirimkan komponen titik kedua dari l garis*/


/* kelompok interaksi dengan I/O device, baca/tulis */
void bacagaris(point p1,point p2,garis *l);
/* makegaris(p1,p2) dari p1 dan p2 yang dibaca */

void tulisgaris(garis l);
/* nilai p ditulis ke layar dg format ((x,y),(x,y)) */

/* kelompok operasi relasional terhadap garis */
boolean garisEQ(garis l1,garis l2);
/* mengirimkan true jika l1=l2 */
/* l1 dikatakan = l2 jika titik awal l1 = titik awal l2*/
/* dan titik akhir l1=titik akhir l2 */

boolean garisNEQ(garis l1,garis l2);
/* mengirimkan true jika l1 tidak sama dengan l2 */
/* negasi dari fungsi EQ */

/* kelompok menentukan dimana l berada */

boolean isgarisonsbx(garis l);
/* menghasilkan true jika l terletak pada sumbu x */

boolean isgarisonsby(garis l);
/* menghasilkan true jika l terletak pada sumbu y */

int kuadrangaris(garis l);
/* menghasilkan kuadran dari l (dimana paw dan pakh berada) */
/* precondition: l tdk terletak pd slh satu sumbu */

/* kelompok predikat lain */
boolean isgaristegaklurus(garis l,garis l1);
/* menghasilkan true jika l tegak lurus l1 */

boolean isgarissejajar(garis l,garis l1);
/* menghasilkan true jika l sejajar terhadap l1 */

/* kelompok operasi lain */

garis g_mirrorof(garis l,boolean sbx,boolean sby);
/* menghasilkan salinan l yang dicerminkan */
/* tergantung nilai sbx dan sby */
/* jika sbx bernilai true, maka dicerminkan terhadap sb x */
/* jika sby bernilai true, maka dicerminkan terhadap sb y */

float panjanggaris(garis l);
/* menghitung panjang garis l */

float arahgaris(garis l);
/* menghitung arah dari garis l*/
/* yaitu sudut yang dibentuk dengan sumbu x */

float sudutgaris(garis l);
/* menghasilkan sudut perpotongan antara l dengan l */
/* precondition : l tidak sejajar dg l dan tidak berimpit dg l */

void gesergaris(garis *l,int deltax,int deltay);
/*I.S : l terdefinisi */
/*F.S : l digeser sebesar deltax dan ordinatnya sebesar delta y*/
/*paw dan pakh digeser*/

void mirrorgaris(garis *l,boolean sbx,boolean sby);
/* I.S : l terdefinisi */
/* F.S : l dicerminkan tergantung nilai sbx atau sby */
/* jika sbx true maka dicerminkan thd sumbu x */
/* jika sby true maka dicerminkan thd sumbu y */

void g_putar(garis *l,float sudut);
/* I.S : l terdefinisi */
/* F.S : l diputar sebesar sudut derajat : paw dan pakh diputar */

#endif


GARIS.C


#ifndef GARIS_c
#define GARIS_c
#include .h>
#include
#include "BOOLEAN.h"
#include "GARIS.h"


void makegaris(point p1,point p2,garis &l){
l.paw=p1;
l.pakh=p2;
};

point getpaw(garis l){
return l.paw;
};

point getpakh(garis l){
return l.pakh;
};


void bacagaris(garis &l){
printf("point awal(x) : ");scanf("%d",&l.paw.x);
printf("point awal(y) : ");scanf("%d",&l.paw.y);
printf("point akhir(x) : ");scanf("%d",&l.pakh.x);
printf("point akhir(y) : ");scanf("%d",&l.pakh.y);
};

void tulisgaris(garis l){
printf("((%d,%d)",l.paw.x,l.paw.y);
printf(",(%d,%d))",l.pakh.x,l.pakh.y);
};

boolean garisEQ(garis l1,garis l2){
if(l1.paw.x==l2.paw.x&&
l1.paw.y==l2.paw.y&&
l1.pakh.x==l2.pakh.x&&
l1.pakh.y==l2.pakh.y)
return true;
else
return false;
};

boolean garisNEQ(garis l1,garis l2){
if (!garisEQ(l1,l2))
return true;
else
return false;
};

boolean isgarisonsbx(garis l){
if(l.paw.y==l.pakh.y==0)
return true;
else
return false;
};

boolean isgarisonsby(garis l){
if(l.paw.x==l.pakh.x==0)
return true;
else
return false;
};

int kuadrangaris(garis l){
if(l.paw.x>0 && l.pakh.x>0 && l.paw.y>0 && l.pakh.y>0)
return 1;
else
if(l.paw.x<0>0 && l.pakh.y>0)
return 2;
else
if(l.paw.x<0 && l.pakh.x<0 && l.paw.y<0 && l.pakh.y<0)
return 3;
else
if(l.paw.x>0 && l.pakh.x>0 && l.paw.y<0 && l.pakh.y<0)
return 4;
else
return 0;
};

boolean isgaristegaklurus(garis l1,garis l2){
float m1=(l1.paw.y-l1.pakh.y)/(l1.paw.x-l1.pakh.x);
float m2=(l2.paw.y-l2.pakh.y)/(l2.paw.x-l2.pakh.x);
if (-m1==1/m2)
return true;
else
return false;
};

boolean isgarissejajar(garis l1,garis l2){
float m1=(l1.paw.y-l1.pakh.y)/(l1.paw.x-l1.pakh.x);
float m2=(l2.paw.y-l2.pakh.y)/(l2.paw.x-l2.pakh.x);
if (m1==m2)
return true;
else
return false;
};


garis g_mirrorof(garis l,bool sbx,bool sby){
if(sbx){
l.paw.y=-l.paw.y;
l.pakh.y=-l.pakh.y;
}
if(sby){
l.paw.x=-l.paw.x;
l.pakh.x=-l.pakh.x;
}
return l;
};

float panjanggaris(garis l){
float a=l.paw.x-l.pakh.x;
float b=l.paw.y-l.pakh.y;
return sqrt(a*a+b*b);
};

float arahgaris(garis l){
float a=l.paw.x-l.pakh.x;
float b=l.paw.y-l.pakh.y;
return atan(b/a);
};

float sudutgaris(garis l1,garis l2){
float sudut;
if(!isgarissejajar(l1,l2) || garisNEQ(l1,l2))
sudut=(arahgaris(l1)-arahgaris(l2));
return sudut;
};

void gesergaris(garis &l,int deltax,int deltay){
l.paw.x+=deltax;
l.paw.y+=deltay;
l.pakh.x+=deltax;
l.pakh.y+=deltay;
};

void mirrorgaris(garis &l,bool sbx,bool sby){
if(sbx){
l.paw.y=-l.paw.y;
l.pakh.y=-l.pakh.y;
}
if(sby){
l.paw.x=-l.paw.x;
l.pakh.x=-l.pakh.x;
}
};

void g_putar(garis &l,float sudut){
float sdt=atan(l.paw.y/l.paw.x);
float pjg=l.paw.y/sin(sdt);
l.paw.y=pjg*sin(sdt+sudut);
l.paw.x=pjg*cos(sdt+sudut);

sdt=atan(l.pakh.y/l.pakh.x);
pjg=l.pakh.y/sin(sdt);
l.pakh.y=pjg*sin(sdt+sudut);
l.pakh.x=pjg*cos(sdt+sudut);
};

#endif




Tidak ada komentar:

Posting Komentar