Bir daire çevresindeki metin etiketlerinin konumunu nasıl hesaplayacağımı anlamaya çalışıyorum. Bu, ilk okuduğunda düşündüğünüzden biraz daha karmaşıktır .Etiketler çevre etrafında nasıl konumlandırılır?
Ben temel almak: Bana yarıçap dRadius ile açı Dangle daireyi üzerine gelin verecektir Yani
X = ptCenter.X + (dRadius * Math.Cos(dAngle * Math.PI/180.0))
Y = ptCenter.Y + (dRadius * Math.Sin(dAngle * Math.PI/180.0))
. Tabii ki, DrawText (herhangi bir çeşit, ama ben özellikle DrawingContext.DrawText kullanarak, sizin cevabınız için herhangi bir fark yaparsanız) metnin sol üst köşesi olarak verilen nokta ile çizer.
Sorun şu ki, bu, metni çizmek için doğru konum değil.
Oca yerine Mart yatay Nisan dikey olarak ortalanır ortasında tür gibi görünüyor Şubat alt soldan çekilir nokta etrafında yatay olarak ortalanır: Burada konunun resmidir
Etiketler, etiketler noktanın etrafına düzgün bir şekilde yerleştirilmiyor. Çizmenizin açısına bağlı.
Çizmem gereken etiket sayısı değişebilir, bu yüzden kodlamada sert kodlama faktörleri çıkmaktadır. Ben de çizmek gerekir açıları da değişebilir, bu yüzden orada da herhangi bir şekerleme faktörleri. Bütün bunların anında hesaplanması gerekiyor.
0, 90, 180, 270 özel durumlar gibi gözüküyor, diğerleri ise, noktanın etrafında dikey olarak yarı merkezli olarak görünüyor, ancak konuştuğunuz çemberin hangi tarafına göre sağa veya sola çiziliyor gibi görünüyor. hakkında?
Burada doğru yolda mıyım? Yoksa “bilinen” bir algoritma var mı?
Teşekkürler.
Görünüşe göre, metnin orta noktasını hesaplamak zorunda kalacaksınız, ki bu elbette metne göre değişir .. [Here] (http://stackoverflow.com/questions/25308612/vertical-alignment-with- drawingcontext-drawtext) metnin kendisine göre olan şeyleri hesaplamanın bir örneğidir. [FormattedText] (https://msdn.microsoft.com/en-us/library/system.windows.media.formattedtext (v = vs.110) .aspx) sınıfı size ihtiyacınız olan verileri verecek gibi görünüyor. (Genişlik, WidthIncludingTrailingWhitespace, vb ..) – Quantic