Epsilon และระบบพิกัด

การเลือกระบบพิกัด หรือกล่าวอีกนัยหนึ่งคือการเลือกความหมายของหน่วยโลก 1 หน่วย จะสอดคล้องกับการเลือกค่าเอปซิลอนของแปรง ระบบพิกัดจะแสดงในค่าเมทริกซ์การแปลง inputToWorld ที่คุณส่งไปยัง InProgressStrokesView.startStroke() และการแปลงที่คล้ายกัน ที่คุณใช้กับ Canvas เมื่อวาดเส้นแห้ง

แอปทั่วไปจะพิจารณาเฉพาะหน่วยโลกและปล่อยให้strokeToWorldTransformอาร์กิวเมนต์ของ startStroke() เป็นเมทริกซ์ระบุตัวตนเริ่มต้น

หากแอปของคุณรองรับการแพน การซูม หรือการหมุนพื้นผิวการวาด ค่าที่แน่นอนของเมทริกซ์การแปลงเหล่านั้นจะเปลี่ยนแปลงไปเมื่อเวลาผ่านไป แต่การเปลี่ยนแปลงเหล่านั้นจะแสดงถึงการเปลี่ยนแปลงในวิธีที่กล้องที่ผู้ใช้ดูพื้นผิวการวาดนั้นมองระบบพิกัดโลกของคุณ

ระบบพิกัดโลกสามารถมองได้ว่าเป็นตารางกริดที่มีแต่ละเซลล์เป็นขนาดของหน่วยโลก Epsilon คือขนาดในตารางกริดนั้น ซึ่งเป็นจำนวนจุดลอยตัว ของหน่วยโลก

เมื่อผู้ใช้ซูมเข้าเนื้อหาของคุณ ผู้ใช้จะซูมเข้าตารางกริดของหน่วยโลกด้วย ดังนั้น การเลือกหน่วยโลกและขนาดเอปซิลอนในแง่ของระดับการซูมเริ่มต้นที่ 100% จึงเป็นสิ่งสำคัญ

คำจำกัดความของขนาดหน่วยโลกและค่าเอปซิลอนในหน่วยโลก ต้องเป็นค่าคงที่ตลอดอายุการใช้งานของแอป

การใช้งานภายในใช้ค่าเอปซิลอนเพื่อกำหนดว่าจุด 2 จุดต้องอยู่ใกล้กันมากเพียงใดจึงจะถือว่าเป็นจุดเดียวกัน กล่าวคือ ระยะทางใดๆ ที่น้อยกว่าเอปไซลอนจะถือเป็นระยะทาง 0 ซึ่งใช้ในการหาปริมาณและ ปัดเศษการคำนวณภายใน

ขนาดหน่วยโลกและค่าเอปซิลอนที่สมเหตุสมผลคืออะไร

ขนาดหน่วยโลกควรเป็นแบบไม่ขึ้นอยู่กับความหนาแน่นเพื่อให้พกพาได้ในหน้าจอขนาดต่างๆ และความหนาแน่นของอุปกรณ์ หน่วยคลาสสิกสำหรับสถานการณ์ดังกล่าวคือ พิกเซลอิสระ (dp) โดยทั่วไป ให้เลือก 1 dp เป็น ขนาดหน่วยโลก

เมื่อเลือกค่าเอปซิลอนคงที่ ให้หลีกเลี่ยงการปัดเศษการติดตั้งใช้งานภายใน เป็นระยะทางที่ใหญ่กว่า 1 พิกเซล เมื่อมีหน่วยโลกขนาด 1 dp ค่าเอปซิลอนควรมีค่าไม่เกิน 1/4 (0.25 หน่วยโลก) เพื่อให้เป็นขนาดของพิกเซลในอุปกรณ์ที่มีความหนาแน่นในการแสดงผลสูง ซึ่ง 1 dp อาจเป็น 4 px อย่างไรก็ตาม หากต้องการ รองรับการซูมเนื้อหาของผู้ใช้ได้สูงสุด 10 เท่าและยังคง การปัดเศษที่เกี่ยวข้องกับเอปซิลอนไว้ที่ 1 พิกเซลหรือน้อยกว่า เอปซิลอนควรเป็น 0.25 หารด้วย 10 ซึ่งเท่ากับ 0.025 หน่วยโลก

ซึ่งไม่ได้หมายความว่าคุณจะซูมเข้าได้ไม่เกิน 10 เท่า แต่คุณอาจเริ่ม เห็นความไม่แม่นยำและอาร์ติแฟกต์ในการแสดงผลเส้นที่จุดนั้น

การเลือกค่าเอปซิลอนเป็นการรักษาสมดุลระหว่างรายละเอียดที่แม่นยำเมื่อซูมเข้า กับทรัพยากรการคำนวณ เช่น

  • รอบ CPU เพื่อคำนวณรูปทรงที่แม่นยำยิ่งขึ้น
  • หน่วยความจำเพื่อจัดเก็บรายละเอียดเพิ่มเติมในรูปทรงเรขาคณิตนั้น
  • เวลา GPU ในการแสดงผลรูปทรงเรขาคณิตนั้น

หลักเกณฑ์เหล่านี้เป็นค่าเริ่มต้นที่สมเหตุสมผล แต่คุณสามารถใช้หลักเกณฑ์เหล่านี้เพื่อเลือก ระบบพิกัดและค่าเอปซิลอนที่เหมาะกับความต้องการของคุณมากขึ้นได้

การเบี่ยงเบนค่าที่แนะนำเหล่านี้มากเกินไปอาจส่งผลเสียต่อ แอปพลิเคชันของคุณ เช่น การใช้ทรัพยากรที่เพิ่มขึ้นอาจทำให้แอปพลิเคชันทำงานช้า ในบางกรณี ปัญหาความแม่นยำของจุดลอยตัวอาจ แสดงเป็นอาร์ติแฟกต์ภาพที่แปลกประหลาดได้เช่นกัน