Advertisement
Guest User

Untitled

a guest
Sep 2nd, 2015
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.75 KB | None | 0 0
  1. /* Body Prototype type point */
  2.  
  3. #include "point.h"
  4.  
  5. const float pi = 3.14;
  6.  
  7. /* Body Prototype */
  8.  
  9. POINT MakePoint(float x, float y) {
  10. /*  membentuk sebuah point dari komponen-komponennya */
  11. /*  Kamus Lokal  */
  12.     POINT p;
  13. /*  Algoritma */
  14.         GetAbsis(p) = x;
  15.         GetOrdinat(p) = y;
  16.         return (p);
  17.     }
  18.  
  19. //interaksi dengan I/O device baca/tulis
  20. void BacaPoint(POINT *p) {
  21. /*  Makepoint(x,y,P) membentuk P dari x dan y yang dibaca */
  22. /*  Kamus Lokal  */
  23.     float x,y;
  24. /*  Algoritma */
  25.         scanf("%f", &x);
  26.         scanf("%f", &y);
  27.         *p = MakePoint(x,y);
  28.     }
  29.  
  30. void TulisPoint(POINT p) {
  31. /*  nilai p ditulis ke layar dengan format "(X,Y)"
  32.     harap menggunakan presisi 2 angka dibelakang koma
  33.  
  34.     Silahkan gunakan line berikut ini
  35.     printf("(%.2f, %.2f)\n",GetAbsis(p),GetOrdinat(p));
  36. */
  37. /*  Kamus Lokal  */
  38. /*  Algoritma */
  39.         printf("(%.2f, %.2f)\n", GetAbsis(p),GetOrdinat(p));
  40.     }
  41.  
  42. //kelompok operasi aritmatika terhadap type
  43. POINT Tambah(POINT p1, POINT p2) {
  44. /*  menghasilkan point yang bernilai p1 + p2
  45.     melakukan operasi penjumlahan vektor
  46. */
  47. /*  Kamus Lokal  */
  48.     POINT hasil;
  49. /*  Algoritma */
  50.         GetAbsis(hasil) = (GetAbsis(p1) + GetAbsis(p2));
  51.         GetOrdinat(hasil) = (GetOrdinat(p1) + GetOrdinat(p2));
  52.  
  53.         return(hasil);
  54.     }
  55.  
  56. POINT Kurang(POINT p1, POINT p2) {
  57. /*  menghasilkan point bernilai p1-p2
  58.     buatlah spesifikasi pengurangan dua buah point
  59. */
  60. /*  Kamus Lokal  */
  61.     POINT hasil;
  62. /*  Algoritma */
  63.         GetAbsis(hasil) = (GetAbsis(p1) - GetAbsis(p2));
  64.         GetOrdinat(hasil) = (GetOrdinat(p1) - GetOrdinat(p2));
  65.  
  66.         return(hasil);
  67.     }
  68.    
  69.  
  70. float DotProduct(POINT p1, POINT p2) {
  71. /*  operasi perkalian p1.p2 melakukan operasi dot */
  72. /*  Kamus Lokal  */
  73.     float hasil;
  74. /*  Algoritma */
  75.         hasil= (GetAbsis(p1)*GetOrdinat(p2)) + (GetAbsis(p2)*GetOrdinat(p2));
  76.  
  77.         return(hasil);
  78.     }
  79.  
  80.  
  81. //kelompok operasi relasional terhadap point
  82. boolean EQ(POINT p1, POINT p2) {
  83. /*  mengirimkan true jika p1=p2 absis dan ordinatnya sama */
  84. /*  Kamus Lokal  */
  85.     boolean same;
  86. /*  Algoritma */
  87.         if (GetAbsis(p1) && GetAbsis(p2) && GetOrdinat(p1) && GetOrdinat(p2)) {
  88.             same = true;
  89.         } else
  90.             same = false;
  91.  
  92.         return(same);
  93.     }
  94.  
  95. boolean NEQ(POINT p1, POINT p2) {
  96. /*  mengirimkan true jika p1 tidak sama dengan p2 */
  97. /*  Kamus Lokal  */
  98.     boolean same;
  99. /*  Algoritma */
  100.         if ((GetAbsis(p1) != GetAbsis(p2)) && (GetOrdinat(p1) != GetOrdinat(p2)) {
  101.             same = true;
  102.         } else
  103.             same = false;
  104.        
  105.         return(same);
  106.     }
  107.  
  108. boolean KurangDari(POINT p1, POINT p2) {
  109. /*  mengirimkan true jika p1<p2. definisi lebih kecil : lebih kiri bawah
  110.     dalam bidang kartesian
  111. */
  112. /*  Kamus Lokal  */
  113.     boolean kurang;
  114. /*  Algoritma */
  115.         if ((GetAbsis(p1) < GetAbsis(p2)) && (GetOrdinat(p1) < GetOrdinat(p2))) {
  116.             kurang = true;
  117.         } else
  118.             kurang = false;
  119.  
  120.         return(kurang);
  121.     }
  122.  
  123.  
  124. boolean LebihDari(POINT p1, POINT p2) {
  125. /*  mengirimkan true jika p1>p2. definisi lebih besar : lebih kanan atas
  126.     di bidang kartesian
  127. */
  128. /*  Kamus Lokal  */
  129.     boolean lebih;
  130. /*  Algoritma */
  131.         if ((GetAbsis(p1) < GetAbsis(p2)) && (GetOrdinat(p1) < GetOrdinat(p2))) {
  132.             lebih = true;
  133.         } else
  134.             lebih = false;
  135.  
  136.         return(lebih);
  137.     }
  138.  
  139. //kelompok menentukan dimana p berada
  140. boolean IsOrigin(POINT p) {
  141. /*  menghasilkan true jika p adalah titik origin */
  142. /*  Kamus Lokal  */
  143.     boolean orig;
  144. /*  Algoritma */
  145.         if ((GetAbsis(p)=0) && (GetOrdinat(p)=0)) {
  146.             orig = true;
  147.         } else
  148.             orig = false;
  149.  
  150.         return(orig);
  151.     }
  152.  
  153. boolean IsOnSbX(POINT p) {
  154. /*  menghasilkan true jika p terletak pada sumbu x */
  155. /*  Kamus Lokal  */
  156.     boolean sumbx;
  157. /*  Algoritma */
  158.         if (GetAbsis(p)=0) {
  159.             sumbx = true;
  160.         } else
  161.             sumbx = false;
  162.  
  163.         return(sumbx);
  164.     }
  165.  
  166. boolean IsOnSbY(POINT p) {
  167. /*  menghasilkan true jika p terletak pada sumbu y */
  168. /*  Kamus Lokal  */
  169.     boolean sumby;
  170. /*  Algoritma */
  171.         if (GetAbsis(p)=0) {
  172.             sumby = true;
  173.         } else
  174.             sumby = false;
  175.  
  176.         return(sumby);
  177.     }
  178.  
  179. int Kuadran(POINT p) {
  180. /*  menghasilkan kuadran dari p : 1, 2, 3 dan 4
  181.     precond : p bukan titik origin
  182.     dan  tidak terletak di salah satu sumbu
  183. */
  184. /*  Kamus Lokal  */
  185.     int kuad;
  186. /*  Algoritma */
  187.         if ( IsOrigin(p) != true) {
  188.             if (GetAbsis(p) > 0) && (GetOrdinat(p) > 0) {
  189.                 kuad = 1;
  190.             } else
  191.             {if (GetAbsis(p) < 0) && (GetOrdinat(p) > 0) {
  192.                     kuad = 2;
  193.                 } else
  194.                 {
  195.                     if (GetAbsis(p) < 0) && (GetOrdinat(p) < 0) {
  196.                         kuad = 3;
  197.                     } else
  198.                         kuad = 4;
  199.                 }
  200.             }
  201.                
  202.         }
  203.         return(kuad);
  204.     }
  205.  
  206. //kelompok operasi lain terharap tipe
  207. POINT NextX(POINT p) {
  208. /*  mengirim salinan P dengan absis ditambah satu */
  209. /*  Kamus Lokal  */
  210.     POINT salinan;
  211. /*  Algoritma */
  212.         GetAbsis(salinan) = GetAbsis(p) + 1;
  213.         GetOrdinat(salinan) = GetOrdinat(p);
  214.         return(salinan);
  215.     }
  216.  
  217. POINT NextY(POINT p) {
  218. /*  mengirim salinan P dengan ordinat ditambah satu */
  219. /*  Kamus Lokal  */
  220.     POINT salinan;
  221. /*  Algoritma */
  222.         GetAbsis(salinan) = GetAbsis(p);
  223.         GetOrdinat(salinan) = GetOrdinat(p)+ 1;
  224.         return(salinan);
  225.     }
  226.  
  227. POINT PlusDelta(POINT p, float deltaX, float deltaY) {
  228. /*  mengirim salinan p yang absisnya = absis(p) + deltaX
  229.     dan ordinatnya adalah ordinat(p) +deltaY
  230. */
  231. /*  Kamus Lokal  */
  232.     float x,y;
  233.     POINT salinan;
  234. /*  Algoritma */
  235.         x = GetAbsis(p) + deltaX;
  236.         y = GetOrdinat(p) + deltaY
  237.         SetAbsis(salinan, x);
  238.         SetOrdinat(salinan, y);
  239.  
  240.         return(salinan);
  241.     }
  242.  
  243. POINT MirrorOf(POINT p, boolean SbX, boolean SbY) {
  244. /*  menghasilkan salinan P yang dicerminkan
  245.     tergantung nilai SbX dan SbY
  246.     jika SbX bernilai true maka dicermintan thd sumbu x
  247.     jika SbY bernilai true maka dicerminkan terhadap sumbu Y
  248. */
  249. /*  Kamus Lokal  */
  250. /*  Algoritma */
  251.  
  252. float Jarak0(POINT p) {
  253. /*  menghitung jarak p ke (0,0) */
  254. /*  Kamus Lokal  */
  255.     float hasil;
  256.     double exponent=2;
  257. /*  Algoritma */
  258.         hasil = sqrt(pow(GetAbsis(p), exponent) + pow(GetOrdinat(p), exponent));
  259.  
  260.         return(hasil);
  261.     }
  262.  
  263. float Panjang(POINT p1, POINT p2) {
  264. /*  menghitung panjang garis yang dibentuk p1 dan p2 */
  265. /*  Kamus Lokal  */
  266.     float hasil;
  267.     float x1, x2, y1, y2;
  268.     double exponent=2;
  269.  
  270. /*  Algoritma */
  271.  
  272.         x1 = GetAbsis(p1);
  273.         x2 = GetAbsis(p2);
  274.         y1 = GetOrdinat(p1);
  275.         y2 = GetOrdinat(p2);
  276.         hasil = sqrt(pow((x1-x2), exponent) + pow((y1-y2), exponent));
  277.  
  278.         return(hasil);
  279.     }
  280.  
  281. void Geser(POINT *p, float deltaX, float deltaY) {
  282. /*  IS : p terdefinisi
  283.     FS : p digeser absisnya sebesar deltaX dan ordinatnya sebesar deltaY
  284. */
  285. /*  Kamus Lokal  */
  286.     float x,y;
  287. /*  Algoritma */
  288.    
  289.         x = GetAbsis(p) + deltaX;
  290.         y = GetOrdinat(p) + deltaY
  291.         *p = MakePoint(x, y);
  292.     }
  293.  
  294. void GeserKeSbX(POINT *p) {
  295. /*  IS : p terdefinisi
  296.     FS : p di sumbu x dengan absis sama dengan absis sama
  297.     dengan sbsis absis semula
  298.     proses : tergeser ke sumbu x
  299.     contoh : jika koordinat semula (9,9) menjadi (9,0)
  300. */
  301. /*  Kamus Lokal  */
  302. /*  Algoritma */
  303.    
  304.         *p = MakePoint(GetAbsis(p), 0);
  305.     }
  306.  
  307. void GeserKeSbY(POINT *p) {
  308. /*  IS : p terdefinisi
  309.     FS : p di sumbu x dengan absis sama dengan absis sama
  310.     dengan sbsis absis semula
  311.     proses : tergeser ke sumbu Y
  312.     contoh : jika koordinat semula (9,9) menjadi (0,9)
  313. */
  314. /*  Kamus Lokal  */
  315. /*  Algoritma */
  316.    
  317.         *p = MakePoint(0, GetOrdinat(p));
  318.     }
  319.  
  320. void Mirror(POINT *p, boolean SbX, boolean SbY) {
  321. /*  IS : p terdefinisi
  322.     FS : p dicerminkan tergantung nilai SbX atauSbY
  323.     jika SbX true maka dicerminkan terhadap sumbu X
  324.     jika SbY true maka dicerminkan terhadap sumbu Y
  325. */
  326. /*  Kamus Lokal  */
  327.     float x,y;
  328. /*  Algoritma */
  329.    
  330.         x = GetAbsis(p);
  331.         y = GetOrdinat(p);
  332.         if (SbX = true) {  
  333.             *p = MakePoint(x, -y);
  334.         } else
  335.         {
  336.             *p = MakePoint(-x, y);
  337.         }
  338.     }
  339.  
  340. void Putar(POINT *p, float sudut) {
  341. /*  IS : p terdefinisi
  342.     FS : p diputar sebesar (sudut) derajat berlawanan jarum jam
  343. */
  344. /*  Kamus Lokal  */
  345.     float x, y, rad;
  346. /*  Algoritma */
  347.     rad = sudut/180 * pi;
  348.     x = GetAbsis(p);
  349.     y = GetOrdinasAbt(p);
  350.     x = x*cos(rad) - y*sin(rad);
  351.     y = x*sin(rad) + y*cos(rad);
  352.     *p = MakePoint(x,y);
  353. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement