Şu ana kadar yaptığımız şey bir çokgen yaratmaktı. Bunu da aşağıdaki gibi yaptık. Bize bir yarıçap r, bir nokta c, ve kenar sayısı s verildiği zaman eşit kenarlı bir çokgen yarattık.

5 kenarlı bir çokgen yaratma yolumuz

Daha sonra bunun kenarından yeni bir çokgen üretmek istediğimiz zaman ise bize hangi kenardan, kaç kenarlı bir çokgen istenildiği soruldu. Yeni çokgeni yaratmak için önce yeni çokgenin merkezinin koordinatlarını ve sonra da yeni çokgenin yarıçapını bulduk. Bunları yapmak epey karmaşık bir işlemdi hatırlarsanız. Aşağıya bununla ilgili olan kod parçasını koyuyorum.

  // Bu Multiangle'in "i" numarali kenarina, "snew" adet kenari
  // olan yeni bir Multiangle cizer
  public Multiangle createNewAt(int i, int snew) {

    int s = elements.length;
    if (i >= s) return null;
    float sf = (float)snew;
    float correct = 0;
    if ( sf/2 <= (int)(snew/2) ) {
      correct = - PI/snew;
      println ("odd");
    }
    float angle = TWO_PI/s;
    println (elements[i].getDistance(elements[(i+1)%s]));
    float rnew = elements[i].getDistance(elements[(i+1)%s])/2/sin(PI/snew);
    float dis = rnew * cos(PI/snew) + radius * cos(PI/s);
    Point cennew = new Point(center.x + dis * sin((i+0.5) * angle + skew ),
                             center.y + dis * cos((i+0.5) * angle + skew ));
    Multiangle ret =  new Multiangle(snew, rnew, cennew,
              (PI/s + (i*2*PI/s))%(2*PI/snew) + skew + correct);
    return ret;

  }

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

  public float getRadius() {
    return radius;
  }
}

Burada cennew ve rnew‘un ne kadar zor hesaplandığını görüyorsunuz.

Bunlardan çeşitli örüntüler üretmek olduğu zaman Multiangle ile sınırlı kalmamam lazım. Yıldızlar da üretebilmeliyim örneğin. Multiangle‘dan sonra herhalde ikinci adım Star isminde bir class yaratmaktır. Elbette bir Multiangle‘ın kenarından bir Star ve tersini de yapabilmek isteyeceğim. Yukarıdaki koda bakarak bunun ne kadar zor olacağını tahmin etmek zor değil.

Diğer bir sorun da Multiangle ile Star‘ı tek bir class altında ifade edemiyor olmak. Böyle olmadığı zaman bütün bunları bir torbanın içine koyamıyorum örneğin.

Aslında daha da büyük bir sorun: sadece eşit kenarlı çokgenler ve yıldızlar mı üretmek zorundayım? Hayır! İstediğim herhangi bir şekli üretebilmeliyim. İster düzgün çokgenler olsun ister kenarları eşit olmayanlar olsun. Bunda tamamen özgür olabilmem lazım.

Bütün bunları nasıl yaparım?

Az sonra!