Epsilon ve koordinat sistemi

Bir koordinat sistemi seçimi (diğer bir deyişle 1 dünya biriminin ne anlama geldiği) fırça epsilon değeri seçimiyle birlikte yapılır. Koordinat sistemi, InProgressStrokesView.startStroke() öğesine ilettiğiniz inputToWorld dönüşüm matrisi değerine ve kuru fırça darbeleri çizerken Canvas öğesine uyguladığınız benzer dönüşüme yansıtılır.

Normal bir uygulama yalnızca dünya birimlerini dikkate alabilir ve strokeToWorldTransform bağımsız değişkenini startStroke() varsayılan kimlik matrisi olarak bırakabilir.

Uygulamanızda çizim yüzeyinin kaydırılması, yakınlaştırılması veya döndürülmesi destekleniyorsa bu dönüşüm matrislerinin tam değeri zaman içinde değişir. Ancak bu değişiklikler, kullanıcının çizim yüzeyini görüntülediği kamera tarafından dünya koordinat sisteminizin nasıl görüntülendiğindeki bir değişikliği yansıtır.

Dünya koordinat sistemi, her hücresi bir dünya birimi boyutunda olan bir ızgara olarak düşünülebilir. Epsilon, bu ızgaradaki bir boyuttur. Dünya birimlerinin kayan nokta cinsinden sayısıdır.

Kullanıcılar içeriğinizi yakınlaştırırken dünya birimi ızgarasını da yakınlaştırır. Bu nedenle, varsayılan% 100 yakınlaştırma düzeyinde dünya birimi ve epsilon boyutu seçimi önemlidir.

Dünya birimi boyutu tanımı ve dünya birimlerindeki epsilon değeri, uygulamanızın kullanım ömrü boyunca sabit değerler olmalıdır.

Dahili uygulama, iki noktanın aynı nokta olarak kabul edilmesi için birbirine ne kadar yakın olması gerektiğini belirlemek üzere epsilon değerini kullanır. Diğer bir deyişle, epsilon'dan küçük tüm mesafeler sıfır mesafe olarak kabul edilir. Bu, dahili hesaplamaları nicelleştirmek ve yuvarlamak için kullanılır.

Makul dünya birimi boyutları ve epsilon değerleri nelerdir?

Farklı ekran boyutları ve cihaz yoğunlukları arasında taşınabilirlik için dünya birimi boyutu yoğunluktan bağımsız olmalıdır. Bu tür senaryolarda kullanılan klasik birim, yoğunluktan bağımsız pikseldir (dp). Genellikle dünya birimi boyutunuz olarak 1 dp'yi seçin.

Sabit bir epsilon değeri seçerken, dahili uygulamada sayıların bir pikselden daha büyük bir mesafeye yuvarlanmasından kaçının. 1 dp dünya birimi boyutuyla, epsilon'un en fazla 1/4 (0,25 dünya birimi) olması gerekir.Bu, 1 dp'nin 4 piksel olabileceği yüksek ekran yoğunluklu cihazlarda bir pikselin boyutuna karşılık gelir. Ancak kullanıcının içeriğini 10 kata kadar yakınlaştırmasını desteklemek ve epsilon ile ilgili yuvarlamayı 1 piksel veya daha az tutmak istiyorsanız epsilon, 0, 25'in 10'a bölünmesiyle elde edilen 0, 025 dünya birimi olmalıdır.

Bu, 10 katın üzerinde yakınlaştıramayacağınız anlamına gelmez ancak bu noktada kontur oluşturmada bazı hatalar ve yapılar görmeye başlayabilirsiniz.

Epsilon değeri seçmek, yakınlaştırırken hassas ayrıntılar ile aşağıdaki gibi hesaplama kaynakları arasında bir denge kurmaktır:

  • Daha hassas geometri hesaplamak için CPU döngüleri
  • Geometride daha fazla ayrıntı depolamak için kullanılan bellek
  • Bu geometriyi oluşturmak için gereken GPU süresi

Bu yönergeler makul varsayılan değerlerdir ancak ihtiyaçlarınıza daha uygun koordinat sistemi ve epsilon değerlerini seçmek için bunları kullanabilirsiniz.

Bu önerilen değerlerden çok fazla sapmak uygulamanızı olumsuz etkileyebilir. Örneğin, kaynak tüketiminin artması uygulamanızın yavaş çalışmasına neden olabilir. Bazı durumlarda, kayan nokta duyarlılığı sorunları da garip görsel öğeler olarak ortaya çıkabilir.