Derste kodu yazmaya başlayamamıştık. Processing.org sitesinde poligonlar ve yıldızlar sayfasında nesne tabanlı çalışmıyordu. İşte burada nesne tabanlı örneği bulacaksınız. Şu anda en basit halinde.

İki class yaratıyoruz. Bunlardan biri Point diğeri ise Multiangle. Daha önce derste buna Cokgen demiştik. Nedense ben bu sefer ismini değiştirdim. Kaynak kodları aşağıda.

Çalıştıranlar ve çalıştıramayanlar bu postun altına comment yazabilir mi?

Önce Point

/*
 * Bu class 2D koordinatlari tutar
 */
class Point {
  private float x; // dikkat artik private
  private float y;

  // Bu class'in constructor'i
  Point (float x, float y) {
    this.x = x;
    this.y = y;
  }

  // Benimle verilen p noktasi arasindaki mesafeyi hesaplar
  public float getDistance(Point p) {
    return sqrt( pow(x - p.getx(), 2) + pow(y - p.gety(), 2) );
  }

  // Benimle verilen p noktasi arasindaki egimi hesaplar
  public float getSlope(Point p) {
    return (p.gety() - y) / (p.getx() - x);
  }

  // Artik private tanimladigim icin bu fonksiyonlar lazim.
  public void setx (float x) {
    this.x = x;
  }

  public void sety (float y) {
    this.y = y;
  }

  public float getx () {
    return x;
  }

  public float gety () {
    return y;
  }

}

Şimdi de Multiangle.

class Multiangle {
  private Point[] elements; // Sekli olusturan noktalar
  private float radius; // Seklin icine oturdugu daire
  private Point center; // Bu dairenin merkezinin koordinati

  //  Constructor
  //  int s - Kenar sayisi
  //  float radius - icine oturdugu dairenin yari capi
  //  Point center - dairenin merkezinin koordinatlari
  Multiangle (int s, float radius, Point center) {
    this.radius = radius;
    this.center = center;
    this.elements = new Point[s];
    float angle = TWO_PI/s;
    for (int f = 0; f < s; f++) {
      elements[f] = new Point(center.getx() + sin(angle * f) * radius,
                             center.gety() + cos(angle * f) * radius);
    }
  }

  // Constructor
  // int s - Kenar sayisi
  // float radius - icine oturdugu dairenin yari capi
  Multiangle (int s, float radius) {
    this.elements = new Point[s];
    this.radius = radius;
  }

  /*
   * Bu seklin ekranda gosterilmesini saglar
   */
  public void display () {
    beginShape();  // boyle faydali bir komut vardi...
    for (int f = 0; f < elements.length; f++) {
      Point p = elements[f];
      vertex (p.getx(), p.gety());
    }
    endShape(CLOSE);
  }

  public Point[] getElements() {
    return elements;
  }

  public float getRadius() {
    return radius;
  }
}

Bir de deneme için bunları çalıştıracak kısa bir koda ihtiyacımız var:

void setup() {
  size (600, 600);
  background (255);

  Multiangle a = new Multiangle (5, 100, new Point(300, 300));
  a.display();
  Multiangle b = new Multiangle (8, 100, new Point(100, 300));
  b.display();
  b = new Multiangle(13, 100, new Point(500, 300));
  b.display();

}

Bütün bunları processing içine kopyalayıp çalıştırabilirsiniz. Kopyalamak için kodun olduğu kısmın üstüne gelin. Sol üst köşede küçük ikonlar çıkacak. Bunlar kolay kopyalamanızı sağlayacaktır.