Bezier Eğrisi Çizen Kod

Soru: Üç noktanın koordinatlarını alarak bu noktalardan geçen eğriyi bezier algoritması ile ekrana çizen kodu yazınız.

Çözen : Şadi Evren ŞEKER

Çözüm:

Bezier eğrisini çizebilmek için ikinci dereceden bir denkleme ihtiyaç duyulur. Burada denklemin ikinci derece olmasının sebebi 3 nokta ile çizim yapılmasının istenmesidir.

Öncelikle programımızda kullanacağımız basit temel fonksiyonları kodlayalım:

İki nokta verildiğinde bu iki noktanın ortasındaki noktayı hesaplayan fonksiyonu kodlayalım:

(define (mid-point a-posn b-posn)

(make-posn

(mid (posn-x a-posn) (posn-x b-posn))

(mid (posn-y a-posn) (posn-y b-posn))))

Yukarıda iki sayının orta değerini (aritmetik ortalamasını) hesaplayan mid fonksiyonunu kullandık. Bu fonksiyonu basitçe iki sayının toplamının yarısı olarak aşağıdaki şekilde tanımlayabiliriz:

(define (mid x y)

(/ (+ x y) 2))

Artık bezier fonksiyonumuzu kodlayabiliriz. Buradaki püf noktası sürekli olarak noktaların arasındaki noktaların hesaplanmasıdır. Bu açıdan bir fraktal üretimine benzetilebilir:

(define ( bezier p1 p2 p3) (cond

[(too-small? p1 p2 p3) true]

[else (and (draw-solid-disk (mid-point (mid-point p1 p2) (mid-point p2 p3)) 3)

(bezier (mid-point (mid-point p1 p2) (mid-point p2 p3)) (mid-point p2 p3) p3)

(bezier p1 (mid-point p1 p2) (mid-point (mid-point p1 p2) (mid-point p2 p3)))

)]))

Yukarıdaki kod 3 nokta alıp bu noktalar arasındaki mesafe çizilemeyecek kadar küçük oluncaya kadar (bu mesafe aynı zamanda çizimdeki noktaların seyrekliğini de belirtmektedir) ara nokta hesaplamakta ve hesaplanan bu ara noktaları çizmektedir. Yukarıdaki fonksiyonda bitişi belirten too-small? Fonksiyonunu aşağıdaki şekilde tanımlayabiliriz:

(define (too-small? p1 p2 p3)(cond[(< (abs(- (posn-x p1) (posn-x p2))) 10) true]

[else false]

))

Burada noktalar arası mesafe 10 veya daha düşükse artık yeni nokta üretimi duracaktır.

Çözüm çalıştırması:

(define p1 (make-posn 50 50))

(define p2 (make-posn 150 150))

(define p3 (make-posn 250 100))

Üç nokta tanımlanmıştır

(start 300 200)

Çizim alanı açılmıştır

(bezier p1 p2 p3)

Ve son olarak fonksiyonumuza üç nokta parametre verilmiştir.

Kodun çalıştıktan sonra ekranda oluşturduğu çizim aşağıdaki şekilde görülebilir

Bu yazıyı beğendiyseniz, başkalarının da ilgisini çekebilirsiniz:


230 views

Leave a Reply


4 * dört =

Benzer Yazılar:

Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Bezier Eğrisi Çizen Kod' isimli yazı 31 Oct 2009 tarihinde, saat: 22:18 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam230 defa okunmuştur.

Benzer yazıları Bilgisayar Grafiği (Computer Graphics), Scheme (Lisp) kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.


Category: Bilgisayar Grafiği (Computer Graphics), Scheme (Lisp)