Eliptik A
rc komutunu kullanmak istiyorsunuz . Ne yazık ki, bu sizin sahip olduğunuz kutupsal koordinatlar (yarıçap, açı) yerine başlangıç ve bitiş noktalarının Kartezyen koordinatlarını (x, y) belirtmenizi gerektirir, bu yüzden biraz matematik yapmanız gerekir. İşte (ben test etmedim rağmen) çalışması gereken ve oldukça açıklayıcı umuyoruz bir JavaScript işlevi:
function polarToCartesian(centerX, centerY, radius, angleInDegrees) {
var angleInRadians = angleInDegrees * Math.PI / 180.0;
var x = centerX + radius * Math.cos(angleInRadians);
var y = centerY + radius * Math.sin(angleInRadians);
return [x,y];
}
Hangi açıların hangi saat konumlarının koordinat sistemine bağlı olacağı; sin / cos terimlerini gerektiği gibi değiştirin ve / veya reddedin.
Arc komutu şu parametrelere sahiptir:
rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y
İlk örneğiniz için:
rx
= ry
= 25 ve x-axis-rotation
= 0, çünkü elips değil, bir daire istiyorsunuz. M
Yukarıdaki işlevi kullanarak (sırasıyla, 200, 175) ve yaklaşık (182.322, 217.678), hem başlangıç koordinatlarını (oveya gitmelisiniz) hem de bitiş koordinatlarını (x, y) hesaplayabilirsiniz. Şimdiye kadar bu kısıtlamalar göz önüne alındığında, aslında çizilebilecek dört yay vardır, bu yüzden iki bayrak bunlardan birini seçer. Sanırım muhtemelen large-arc-flag
azalan açı yönünde (anlamı = 0) küçük bir yay çizmek istiyorsunuz (anlamı sweep-flag
= 0). Hep birlikte, SVG yolu:
M 200 175 A 25 25 0 0 0 182.322 217.678
İkinci örnek için (aynı yöne ve dolayısıyla büyük bir yaya gitmek istediğinizi varsayarsak), SVG yolu:
M 200 175 A 25 25 0 1 0 217.678 217.678
Yine, bunları test etmedim.
(edit 2016-06-01) @clocksmith gibi bu API'yı neden seçtiklerini merak ediyorsanız uygulama notlarına bir göz atın . İki olası ark parametrelemesini, "uç nokta parametrelemesini" (seçtikleri) ve "merkez parametrelemesini" (sorunun kullandığı gibi) tanımlarlar. "Uç nokta parametrelendirmesi" tanımında şöyle derler:
Uç nokta parametrelemesinin avantajlarından biri, tüm yol komutlarının yeni "geçerli nokta" nın koordinatlarında bittiği tutarlı bir yol sözdizimine izin vermesidir.
Temel olarak, bu, yayların kendi ayrı nesnelerinden ziyade daha büyük bir yolun parçası olarak kabul edilmesinin bir yan etkisidir. SVG oluşturucunuz eksikse, kaç argüman aldıklarını bildiği sürece, nasıl oluşturulacağını bilmediği herhangi bir yol bileşenini atlayabileceğini düşünüyorum. Ya da belki bir yolun farklı parçalarının birçok bileşenle paralel oluşturulmasını sağlar. Ya da belki de yuvarlama hatalarının karmaşık bir yol boyunca birikmediğinden emin olmak için yaptılar.
Uygulama notları orijinal soru için de yararlıdır, çünkü iki parametrelendirme arasında dönüştürme için daha matematiksel sözde kodları vardır (bu cevabı ilk yazdığımda fark etmedim).
arcSweep
Değişkenin aslındalarge-arc-flag
svg A parametresini kontrol ettiğini unutmayın . Yukarıdaki kodda,sweep-flag
parametre değeri her zaman sıfırdır.arcSweep
muhtemelen yeniden adlandırılmalıdırlongArc
.