จากสิ่งที่ฉันได้เห็นเกือบทุกอย่างใช้พิกัดโดยที่ (0, 0) อยู่ที่มุมบนซ้ายและแกน Y บวกไปในทิศทางลงของหน้าจอของคุณ
ทำไมถึงเป็นเช่นนี้ ทำไมแกน Y เชิงบวกแบบบวกไม่เพิ่มขึ้นอย่างที่แสดงในกราฟในคลาสคณิตศาสตร์อย่างง่าย
จากสิ่งที่ฉันได้เห็นเกือบทุกอย่างใช้พิกัดโดยที่ (0, 0) อยู่ที่มุมบนซ้ายและแกน Y บวกไปในทิศทางลงของหน้าจอของคุณ
ทำไมถึงเป็นเช่นนี้ ทำไมแกน Y เชิงบวกแบบบวกไม่เพิ่มขึ้นอย่างที่แสดงในกราฟในคลาสคณิตศาสตร์อย่างง่าย
คำตอบ:
สิ่งนี้เกิดขึ้นในประวัติศาสตร์ คอมพิวเตอร์ยุคแรก ๆ มี Cathode Ray Tubes (CRTs) ซึ่ง "วาด" ภาพด้วยรังสีแคโทดจากมุมซ้ายบนไปทางขวาล่าง
เพื่อความสะดวกในการเชื่อมต่อระหว่างหน่วยความจำกราฟิกการ์ดและ CRT หน่วยความจำถูกอ่านตั้งแต่ต้นและภาพถูกดึงจากด้านบนซ้าย (ที่อยู่หน่วยความจำต่ำสุด) ไปทางขวาล่าง (พร้อมที่อยู่หน่วยความจำสูงสุด)
ส่วนขยาย (ตามความคิดเห็น)
CRT จะขึ้นอยู่กับชุดทีวีอะนาล็อกที่มีอยู่ในขณะนั้น
ชุดทีวีสร้างเส้นภาพโดยบรรทัดแรกจากซ้ายไปขวาและจากบนลงล่าง เหตุผลนี้สามารถสันนิษฐานได้ว่าเป็นไปตามสไตล์การเขียนในบทความตะวันตก
นี่เป็นคำถามที่ยอดเยี่ยมที่ฉันคิดหลายครั้ง คำตอบง่ายๆสำหรับ "ทำไม" เป็นเพราะรูปแบบทีวีดึงเส้นจากซ้ายไปขวาและจากบนลงล่าง จอภาพคอมพิวเตอร์ดั้งเดิมคือหน้าจอ CRT (ทีวีขนาดเล็ก) ดังนั้นรูปแบบจึงยังคงเหมือนเดิม เมื่อจอภาพกลายเป็นจอแบน (และทีวีก็กลายเป็นจอแบนด้วย) มันเป็นเรื่องธรรมดาพอ ๆ
แน่นอนคุณสามารถถาม: ทำไมทีวีถึงวาดด้วยวิธีนี้ พวกเขาถูกประดิษฐ์ขึ้นในช่วงต้นศตวรรษที่ 20 เพื่อให้คุณสามารถจินตนาการได้ว่ามีความคิดหรือการขาดหายไปในการออกแบบหากมีการตั้งคำถาม หมายเหตุ:ไม่ได้หมายความว่าจะดูหมิ่นเพราะมันเป็นเรื่องที่ท้าทายยิ่งกว่าที่จะได้รับสมการสำหรับสนามแม่เหล็กที่เบี่ยงเบนรังสีไปยังเส้นที่เหมาะสมบนหน้าจอเมื่อเทียบกับเมทริกซ์ง่ายๆของ (ชนิดนี้ทำให้เกิดคำถามว่าพวกเขาคิดค้น CRT บนโลกได้อย่างไรก่อนเมทริกซ์จุดง่ายย้อนกลับไปในช่วงต้นศตวรรษที่ 20?)
อย่างไรก็ตามฉันเดาว่าอาจจะไม่เคยถูกถาม (เรื่องเลวร้าย) เนื่องจากภาษาตะวันตกเขียนคำจากซ้ายไปขวาและจากบนลงล่าง อาจไม่มีใครรู้สึกถึงความเป็นไปได้ที่จะทำมันแตกต่างกัน
โดยส่วนตัวแล้วฉันไม่ชอบรูปแบบนี้ ฉันได้รับทัศนคตินี้เมื่อฉันตั้งโปรแกรมเกมและการจำลองอื่น ๆ ที่เกี่ยวข้องกับวงโคจรรูปไข่ เมื่อใดก็ตามที่คุณค้นหาสมการการวาดที่เกี่ยวข้องกับบาป cos หรือผิวสีแทนคุณจะต้องย้อนกลับสัญญาณที่เกี่ยวข้องกับพารามิเตอร์แกน y อย่างระมัดระวัง ... หรือคุณจะได้รับสิ่งผิดปกติ ตัวอย่างจะเป็นสมการอิงพารามิเตอร์สำหรับวงรีที่วาดที่มุม 2D ใด ๆ มันอาจเป็นฝันร้ายที่แท้จริงที่ตัดความบาปบาปบาปและสิ่งต่าง ๆ ที่คล้ายกัน
พูดอย่างชัดเจนในแง่คณิตศาสตร์หน้าจออยู่ใน Quadrant 4 แทนที่จะเป็น Quadrant 1ซึ่งมีความซับซ้อนเกินความจำเป็น
BTW เมื่อคุณไปถึง 3 มิติแกน z จะพิจารณาว่า "ขึ้นไป" ในทิศทางที่เป็นบวก แดกดัน [แก้ไข]: อาจจะไม่เห็นความคิดเห็นของฉันด้านล่าง
อีกสองสิ่งที่ฉันรู้ / เจอ:
นาฬิกาแดดในซีกโลกเหนือ (ที่มีพอยน์เตอร์และดิสก์ที่หันหน้าไปทางทิศเหนือขนานกับพื้นดิน) หมุนตามเข็มนาฬิกาเสมอ ดังนั้นถ้าเราใส่ศูนย์ชั่วโมงที่ด้านบนของ "หน้าปัดนาฬิกา" จากนั้นตัวชี้เงาเริ่มขยับไปทางขวา นี่อาจเป็นที่มาของทิศทางจากซ้ายไปขวาในภาษาตะวันตกแพร่กระจายไปยังพิกัดคาร์ทีเซียนและหน้าจอทีวี / คอมพิวเตอร์
คอมพิวเตอร์เก่าไม่ได้วาดวัตถุกราฟิกมากนัก พวกเขาดึงข้อความในพร้อมท์คำสั่ง ดังนั้นจึงเป็นเรื่องธรรมดาที่จะใส่บรรทัด 0 ที่ y = 0 ถ้าเรามีต้นกำเนิดจากซ้ายล่างคณิตศาสตร์ของการวาดเส้นข้อความจะมีส่วนเกี่ยวข้องเพิ่มขึ้นเล็กน้อยและมันอาจเป็นเรื่องใหญ่สำหรับคอมพิวเตอร์ที่ช้าเครื่องเก่า ๆ เรียกว่า "++") นอกจากนี้คุณต้องทราบความละเอียดของหน้าจอในขณะที่ถ้าคุณทำบรรทัดที่ 0 ที่ y = 0 คุณไม่จำเป็นต้องรู้ความละเอียด
ภาคผนวก: กราฟิกก่อนหน้านี้ถูกสร้างขึ้นบนจอภาพแบบเวกเตอร์เพียงหนึ่งก้าวจากออสซิลโลสโคปที่เห็นในห้องแล็บซึ่ง (0,0) จะอยู่ตรงกลางของหน้าจอขึ้นอยู่กับปุ่มหมุนบางอันเพื่อตั้งระดับ X / Y, X / Y ชดเชยและอาจกลับ X / Y
ฮาร์ดแวร์เฉพาะของ Atari "Asteroids" (1979) ยกตัวอย่างเช่นใช้หน้าจอแบบเวกเตอร์ มันจะน่าสนใจที่จะรู้ว่ามันคิดว่าระบบพิกัดของโปรแกรมคืออะไร
ระบบ"Sketchpad"ของ Ivan Sutherland (1963) ใช้จอแสดงผลแบบเวกเตอร์TX-2และใน"Sketchpad: ระบบการสื่อสารด้วยกราฟิคMan-Machine" (วิทยานิพนธ์ปริญญาเอก, มกราคม 1963) เขาเขียนลงในหน้า 70ff:
ระบบพิกัดของระบบการแสดงผล TX-2 มีจุดกำเนิดที่กึ่งกลางของขอบเขตและต้องการข้อมูลการเบี่ยงเบนสิบบิตซึ่งอยู่ทางด้านซ้ายของซับบิตคอมพิวเตอร์ 18 บิตสำหรับแต่ละแกน
...
เพื่อความสะดวกในการเป็นตัวแทนของตัวแปรส่วนประกอบจำนวนมากและเพื่อความแม่นยำมากกว่า 18 บิต Sketchpad ใช้ระบบพิกัดภายในสำหรับการแสดงการวาดภาพที่หย่าร้างจากการเป็นตัวแทนที่ต้องการโดยระบบการแสดงผล ระบบภายในนี้เรียกว่าระบบประสานงาน "เพจ" เมื่อคิดถึงภาพวาดใน Sketchpad พิกัดของหน้าจะถือว่าเป็นค่าคงที่ การแปลงขอบเขตหน้าที่ให้ความสามารถในการดูบนขอบเขตส่วนใด ๆ ของหน้าที่ต้องการในระดับใด ๆ ของการขยายราวกับว่าผ่านแว่นขยาย (... ) ตัวประกอบสเกลสำหรับการแสดงผลควบคุมขนาดของสี่เหลี่ยมจัตุรัสซึ่ง จะปรากฏในขอบเขต จำนวนจริงที่บันทึกไว้คือความยาวครึ่งหนึ่งของด้านข้างของสี่เหลี่ยมจัตุรัสเรียกว่า SCSZ สำหรับ SCope SiZe) ดังแสดงในรูปที่ 5.2 นอกจากนี้ยังบันทึกพิกัดหน้าของกึ่งกลางของขอบเขตสี่เหลี่ยม โดยการเปลี่ยนตัวเลขเหล่านี้ส่วนของหน้าที่แสดงในขอบเขตอาจมีการเปลี่ยนแปลงในขนาดและย้าย แต่ไม่หมุน
แผนภาพที่ 5.2 ในหน้า 73 แสดงว่า "ระบบพิกัดหน้า" ใช้หลักการทางคณิตศาสตร์ของระบบพิกัด X / Y ระบบพิกัดคาร์ทีเซียน (บางคนอาจถามว่าทำไมการประชุมแบบนั้นถึงเป็น ... )
ไม่ใช่ทุกอย่างที่อยู่บนซ้าย
ตัวอย่างเช่น OpenGL ระบุว่าจุดกำเนิดอยู่ที่ด้านล่างซ้ายและนี่เป็นที่แพร่หลายทั่วทั้ง API: พิกัดพื้นผิว, วิวพอร์ต, สี่เหลี่ยมเท็กเซล, การฉายออร์โธแบบมาตรฐาน: มันอยู่ด้านล่างซ้ายตลอดทาง
มีความแตกต่างในการคิดที่นี่
บนหน้าจอคอมพิวเตอร์เช่นเดียวกับหนังสือเมื่อมีคนอ่าน (และฉันสมมติว่าเป็นภาษาอย่างภาษาอังกฤษที่นี่) พวกเขาอ่านจากซ้ายไปขวาและจากบนลงล่าง คุณทำมันเองเมื่อคุณเขียนคำถามนี้และคุณทำเมื่อคุณอ่านคำตอบ
ในวิชาคณิตศาสตร์และการออกแบบเมื่อคุณพล็อตกราฟคุณมีแกน X และแกน Y ที่มีค่า X บวกจะเหลือและ Y บวกจะเพิ่มขึ้น
หากคุณกำลังสร้างสิ่งต่าง ๆ เช่น 2D GUI ในเกมมันจะง่ายขึ้นและง่ายขึ้นสำหรับผู้ใช้หลายคนในการจัดวางในลักษณะ "บนซ้ายคือต้นกำเนิด"
หากคุณกำลังสร้างบางสิ่งบางอย่างเพื่อเลียนแบบการออกแบบหรือเลย์เอาต์บนกระดาษกราฟมันจะง่ายขึ้นและง่ายขึ้นสำหรับผู้ใช้หลายคนในการจัดวางในลักษณะ "ซ้ายล่างคือต้นกำเนิด"
ในความเป็นจริงทั้งสองนี้เป็นแบบแผนค่อนข้างไม่เป็นทางการและถ้าคุณตั้งค่าการฉายภาพ ortho คุณสามารถเลือกที่จะให้ต้นกำเนิดของคุณที่จุดใดก็ได้บนหน้าจอ (หรือปิด) โดยพลการบวกไปทางซ้ายหรือขวาและบวก คุณกำลังขึ้นหรือลง เป็นเพียงเรื่องของการปรับเมทริกซ์การฉายของคุณตามลำดับ
สิ่งสำคัญเพียงอย่างเดียวคือการเลือกการประชุมที่คุณจะใช้และใช้อย่างสม่ำเสมอ
เนื่องจากหน้าจอเริ่มแสดงภาพจากมุมซ้ายด้านบน การเชื่อมโยงการแสดงผลหรือการวาดภาพของแกนพิกัดจะง่ายขึ้นเมื่อ (0,0,0) อยู่ที่มุมบนซ้ายโดยมี + แกน Y เข้าสู่หน้าจอ
อาร์กิวเมนต์สำหรับ: (ตามตัวอย่าง)
var R uint32 = 0xFF0000FF; //:Red pixel
var W uint32 = 0xFFFFFFFF; //:White Pixel.
var Pixels []uint32 = {
W,W,W,R,R,W,W,W,
W,W,R,R,R,R,W,W,
W,R,R,R,R,R,R,R,
W,W,W,R,R,W,W,W, //:8x8 pixel image of " ↑ "
W,W,W,R,R,W,W,W,
W,W,W,R,R,W,W,W,
W,W,W,R,R,W,W,W,
W,W,W,R,R,W,W,W, }
รหัสตรงกับผลลัพธ์บนหน้าจอ :
ลูกศรสีแดงจะกลับหัวหากคุณไม่ได้ใช้ต้นกำเนิดบนซ้าย
ฉันไม่สามารถพูดได้ว่านี่เป็น "ทำไม" เพียงแค่นั้นมันเป็นเหตุผลที่ดีสำหรับแหล่งกำเนิดบนซ้าย