2012-02-28 13 views
9

Convert a quadratic bezier to a cubic?'a baktığımda, programlama öğretmenlerinin her zaman bana neden bu kadar önemli olduğunu söylediklerini anlayabiliyorum. Ne yazık ki dinlemedim. Herhangi bir kuadratik eğriyi kübik hale getirmek için daha somut bir ör- nek, ör., Bilgisayar dili-y - formülü sağlayan herhangi biri olabilir mi? Bazı yuvarlama hataları olabileceğini anlamak, ki bu iyi. Kuadratik eğriyi kübik eğriye dönüştürün

değişkenler tarafından temsil dörtlü eğrisi Verilen: şimdi Control1X, Control1Y ve Control2X, kübik eğri Control2Y sahip

StartX, StartY 
ControlX, ControlY 
EndX, EndY 

Ve aynı kalması StartX, starty ve EndX Endy isteyen ancak bunlarla.

Öyle mi ... Control1Y ve Control2Y hesaplamak için kullanılan aynı temel fonksiyonları ile

Control1X = StartX + (.66 * (ControlX - StartX)) 
Control2X = EndX + (.66 * (ControlX - EndX)) 

?

+0

Ayrıca bkz. Http://stackoverflow.com/questions/3162645/convert-a-quadratic-bezier-to-a-cubic. – lhf

cevap

7

0.66 yerine 2.0/3.0 kullanmanız dışında kodunuz doğru. çeşitli karıştırma karmaşık bir yol dönüştürürken

Control1 = Start 
Control2 = End 

bu kullanışlı olabilir:

0

O çizgi parçaları kullanılarak kübik Bezier eğrileri de dönüştürülebilir

Control1 = (Start + 2 * Control)/3 
Control2 = (End + 2 * Control)/3 

Not kullanarak en yuvarlama hatalarından kaçınmak eğriler (doğrusal, karesel, kübik)

Ayrıca, eliptik yayları kübik dönüştürmek için temel bir dönüşüm de vardır (bazı küçük farkedilemeyen hatayla birlikte) s): sadece en azından eliptik dörtlüler üzerindeki yayı ayırmanız gerekir (elipsin iki ya da daha fazla simetrik ekseninde elipsin kesilmesi ya da elipsin bir daire olması halinde merkezden geçen rastgele ortogonal eksende, sonra her bir yayı temsil eder; Elips bir cricle olduğunda, iki odak noktası aynı noktada, dairenin merkezi ile karıştırılır).

Çoğu SVG oluşturucusu, bunu, sekiz ana bölüme ekleyerek böylelikle yapar (böylece, yalnızca iki ana eksenin geçtiği noktalarda değil, aynı zamanda elips olduğunda iki çapraz eksen için de kesin konum elde edersiniz. bir daire (her daire) (elips bir daire değilse, sadece küçük eksen boyunca doğrusal bir dönüşümle düzleştirilmiş bir daire olarak asimile edin, aynı hesaplama yaparsınız), çünkü oktantlar da oldukça hassas bir şekilde konumlandırılmıştır (cos (pi/4) = sin (pi/4) = sqrt (2)/2 ~ 0.71, ve bu ek bölünme, dairenin 45 derecesinde diyagonalleri geçen noktalarda teğetlerin kesin olarak işlenmesine izin vereceğinden): tam bir elips daha sonra 8 kübik yay (elips ve 16 kontrol noktasında 8 puan): Bu eliptik yaylar ve kübik yaylar arasındaki farkı neredeyse fark etmeyeceksiniz (t'yi kullanan bir algoritma yaratabilirsiniz) Bir Bezier'i doğrusal bölümlerin bir listesine bölerek hesaplanan aynı "düzleştirme hatası", daha sonra satır segmentleri için klasik hızlı Bresenham algo kullanılarak çizilir).


gibi bu yollar, kullanım için "vuruş" dönüştürülmelidir zaman özellikle, belirli bir mesafede yol diğer eğriler, "tampon" ve özellikle eğrileri elde istediğinizde yararlıdır rasgele yollarının dönüşümü tanımlı "strok genişliği": iki "iç" ve "dış" eğrileri hesaplamanız ve daha sonra mitlerin/düğmeler/kareler/yuvarlatılmış köşelerin nasıl dönüştürüleceğine ve daha sonra uzun mesafelerin uygun bir mesafede nasıl kesileceğine odaklanmanız gerekir. gönye sınırı "faktör" strok genişliği ").yerine iki segment iki yay arasında bir köşe varken

Daha gelişmiş render da segmentleri karıştırma keyfi bir yolunu dönüştürülüyor ...

(bu sevimli coğrafi haritalar çizim için yararlıdır) teğet çevreler tarafından temsil edilen MITERS kullanacak, Eliptik ve Bezier yayları sadece kübik olarak, yakınlaştırılan görüntülerde görülebilen aşırı kusurlar olmadan kesin görüntüleri hesaplamak için gerekli bir adımdır. Bu durumda, "kontur" tamponlarınız bazı efektler (örneğin bilgi işlem çizgileri gibi) almak ve daha sonra sonuçları geliştirmek için gereklidir. Yarı saydam pikseller veya işlenmiş konturları yumuşatmak için alt pikseller ile (yumuşatma yalnızca her şey çizgi parçalarına düzleştirildiğinde hesaplamak kolaydır ve alsos yalnızca küp içeren yolları yönetmek zorundaysa daha kolay olabilir) ic bezers: gerektiğinde donanım tarafından hızlandırılabilir ve hızlandırılabilir).