إيبسيلون ونظام الإحداثيات

إنّ اختيار نظام إحداثيات، أي اختيار ما تعنيه 1 وحدة عالمية، يسير جنبًا إلى جنب مع اختيار قيمة إبسيلون للفرشاة. يظهر نظام الإحداثيات في قيمة مصفوفة التحويل inputToWorld التي تمرّرها إلى InProgressStrokesView.startStroke() والتحويل المشابه الذي تطبّقه على Canvas عند رسم ضربات جافة.

يمكن لتطبيق نموذجي أن يأخذ في الاعتبار وحدات العالم فقط ويترك وسيطة strokeToWorldTransform للدالة startStroke() كمصفوفة تعريفية تلقائية.

إذا كان تطبيقك يتيح تحريك سطح الرسم أو تكبيره أو تدويره، ستتغير القيمة الدقيقة لمصفوفات التحويل هذه بمرور الوقت، ولكن هذه التغييرات تعكس تغييرًا في طريقة عرض نظام الإحداثيات العالمي من خلال الكاميرا التي يرى المستخدم سطح الرسم من خلالها.

يمكن تصوّر نظام الإحداثيات العالمي على أنّه شبكة يكون حجم كل خلية فيها بمقدار وحدة عالمية. إبسيلون هو حجم في تلك الشبكة، وهو عدد عشري يمثل وحدات العالم.

عندما يكبّر المستخدمون المحتوى، يتم تكبير شبكة وحدات العالم أيضًا، لذا من المهم اختيار وحدة العالم وحجم إبسيلون من حيث مستوى التكبير التلقائي بنسبة% 100.

يجب أن تكون قيمة تعريف حجم وحدة العالم وقيمة إبسيلون بوحدات العالم قيمًا ثابتة طوال فترة استخدام تطبيقك.

يستخدم التنفيذ الداخلي قيمة إبسيلون لتحديد مدى تقارب نقطتين من بعضهما البعض ليتم التعامل معهما كنقطة واحدة. بعبارة أخرى، يتم التعامل مع أي مسافة أقل من إبسيلون على أنّها مسافة صفر. يُستخدَم هذا النوع لتحديد عدد الخانات العشرية وتقريب العمليات الحسابية الداخلية.

ما هي أحجام الوحدات العالمية وقيم إبسيلون المعقولة؟

لضمان إمكانية نقل المحتوى بين أحجام الشاشات المختلفة وكثافات الأجهزة، يجب أن يكون حجم وحدة العالم مستقلاً عن الكثافة. وحدة القياس الكلاسيكية لهذه السيناريوهات هي وحدات البكسل المستقلة الكثافة (dp). اختَر عادةً 1 dp كحجم وحدة العالم.

عند اختيار قيمة ثابتة لإبسيلون، تجنَّب تقريب الأرقام في عملية التنفيذ الداخلية إلى أي مسافة أكبر من بكسل واحد. عندما يكون حجم وحدة العالم 1 dp، يجب ألا تتجاوز قيمة إبسيلون 1/4 (0.25 وحدة عالمية) ليكون حجمها بحجم بكسل واحد على الأجهزة ذات الكثافة العالية للعرض حيث يمكن أن تكون 1 dp هي 4 بكسل. ومع ذلك، إذا أردت السماح للمستخدم بتكبير المحتوى بمقدار 10 مرات مع الحفاظ على تقريب القيم المرتبطة بـ epsilon إلى بكسل واحد أو أقل، يجب أن تكون قيمة epsilon هي 0.25 مقسومة على 10، أي 0.025 وحدة عالمية.

لا يعني هذا أنّه لا يمكنك التكبير أكثر من 10 مرات، ولكن قد تبدأ في ملاحظة بعض عدم الدقة والتشوّهات في عرض ضربات الفرشاة عند هذه النقطة.

يجب أن يكون اختيار قيمة إبسيلون متوازنًا بين الدقة عند التكبير والموارد الحسابية، مثل:

  • دورات وحدة المعالجة المركزية (CPU) لحساب أشكال هندسية أكثر دقة
  • الذاكرة لتخزين المزيد من التفاصيل في هذا الشكل الهندسي
  • مدة استخدام وحدة معالجة الرسومات لعرض هذا الشكل الهندسي

هذه الإرشادات هي إعدادات تلقائية معقولة، ولكن يمكنك استخدامها لاختيار نظام إحداثيات وقيم إبسيلون أكثر ملاءمة لاحتياجاتك.

قد يؤدي الابتعاد كثيرًا عن هذه القيم المقترَحة إلى التأثير سلبًا في تطبيقك. على سبيل المثال، يمكن أن يؤدي ارتفاع استهلاك الموارد إلى بطء تشغيل تطبيقك. في بعض الحالات، يمكن أن تؤدي مشاكل دقة الأرقام العشرية إلى ظهور تشوّهات مرئية غريبة.