การเลือกระบบพิกัด หรือกล่าวอีกนัยหนึ่งคือการเลือกความหมายของหน่วยโลก 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 ในการแสดงผลรูปทรงเรขาคณิตนั้น
หลักเกณฑ์เหล่านี้เป็นค่าเริ่มต้นที่สมเหตุสมผล แต่คุณสามารถใช้หลักเกณฑ์เหล่านี้เพื่อเลือก ระบบพิกัดและค่าเอปซิลอนที่เหมาะกับความต้องการของคุณมากขึ้นได้
การเบี่ยงเบนค่าที่แนะนำเหล่านี้มากเกินไปอาจส่งผลเสียต่อ แอปพลิเคชันของคุณ เช่น การใช้ทรัพยากรที่เพิ่มขึ้นอาจทำให้แอปพลิเคชันทำงานช้า ในบางกรณี ปัญหาความแม่นยำของจุดลอยตัวอาจ แสดงเป็นอาร์ติแฟกต์ภาพที่แปลกประหลาดได้เช่นกัน