Computer Graphics : Coordinate system

Coordinate system เป็นเรื่องที่มีความสำคัญมากในการเรียนรู้เรื่อง computer graphics เป็นระบบที่ใช้ตัวเลข(number) สัญญลักษณ์ (symbols) และแกน (axis) เพื่อระบุตำแหน่งของ object ในโลกเสมือน มีรูปแบบที่สำคัญได้แก่


  ♦ Cartesian coordinates

  ♦ Polar coordinates




Cartesian coordinates


2D Cartesian coordinates


ระบบนี้เป็นระบบที่ถูกนำไปใช้งานค่อนข้างบ่อยและกว้างขวางกว่าระบบอื่น ถูกนำเสนอโดยนักคณิตศาสตร์ชาวฝรั่งเศสชื่อ René Descartes ในช่วงศตวรรษที่ 17 ระบบนี้ประกอบด้วย


  ♦ มีแกน (axis) ที่ตั้งฉากกัน 2 แกน วางบนพื้นที่สมมุติเรียกว่า plane แนวตั้งเรียก "Vertical axis หรือ Y axis (แกน y)" และแนวนอนเรียก "Horizontal axis หรือ X axis (แกน X)"

  ♦ จุดที่แกนทั้งสองตัดกันเรียกว่า "origin" บนแกนทั้งสองจะถูกแบ่งออกเป็นส่วนๆมีหมายเลขกำกับ

  ♦ เมื่อแกนทั้งสองตัดกัน ทำให้ plane ถูกแบ่งออกเป็น 4 ส่วน เรียกว่า quadrant 1, quadrant 2,quadrant 3 และ quadrant 4 (ดูรูปที่ 1)

  ♦ บน X axis มีหมายเลขบอกระยะห่างจาก Y axis ไปทั้งทางซ้ายและทางขวา หากนับไปทางซ้ายของ Y axis ตัวเลขจะมีเครื่องหมายลบ (-) นำหน้า เช่น -1,-2,-3,... ทำนองเดียวกันกับตัวเลขบน Y axis จะมีตัวเลขบอกระยะห่างจาก X axis ทั้งทิศขึ้นบนและลงล่าง หากนับไปทางด้านล่างของ X axis จะมีเครื่องหมายลบ (-) นำหน้า

  ♦ การระบุตำแหน่งบน plane เขียนในรูปแบบคู่อันดับ (order pair) (x,y) โดยที่ x คือตัวเลขที่บอกระยะห่างจาก Y axis และ y คือตัวเลขที่บอกระยะห่างจาก X axis

  ♦ ตำแหน่งบน plane ณ จุด origin คือ (0,0) และการนับตำแหน่งของวัตถุบน plane จะต้องเริ่มนับจากจุด origin เสมอ



รูปที่ 1 Cartesian plane

ตัวอย่างการระบุตำแหน่งของจุดสีฟ้าในรูปที่ 2 ด้วย Cartesian coordinate คือ (5,4)

  1. 5 หมายถึงระยะห่างจาก Y-axis ไปทางขวามือ 5 หน่วย

  2. 4 หมายถึงระยะห่างจาก X axis ขึ้นไปข้างบน 4 หน่วย


รูปที่ 2


3D Cartesian coordinates


ที่กล่าวมาเป็นระบบ Cartesian coordinate ใช้ 2 แกนในการบอกตำแหน่งเป็นการรับทราบในแบบ 2 มิติ (2-dimension,2D) ในการมองแบบ 3 มิติ (3-dimension,3D) ต้องเพิ่มแกนเข้ามาอีก 1 แกนที่ตั้งฉากกับ X-Y plane (ในรูปที่ 2 แสดงด้วย plane สีฟ้า) ซึ่งจะตั้งฉากกับทั้งแกน X และ Y เรียกว่าแกน Z (Z axis) (ดูรูปที่ 3) ในการระบุตำแหน่งใช้ตัวเลข 3 ตัวในรูปแบบ (x,y,z) โดยที่ตัวเลขที่ 3 คือระยะห่างจาก X-Y plane ของวัตถุ


รูปที่ 3

พื้นที่ว่าง (space) ในมุมมองแบบ 3D จะถูกแบ่งออกเป็น 8 ส่วน (octant) ดังรูปที่ 4 โดยแต่ละส่วนมีระบบจำนวนที่ใช้บอกตำแหน่งดังนี้


ตารางที่ 1
Octant(x,y,z)
1(+,+,+)
2(-,+,+)
3(-,-,+)
4(+,-,+)
5(+,+,-)
6(-,+,-)
7(-,-,-)
8(+,-,-)


รูปที่ 4

พื้นที่ว่างใน 3D การหมุนของแกนทั้ง 3 เป็นอิสระ ดังนั้นเพื่อให้เกิดความเข้าใจตรงกันในการกำหนดทิศ จึงมีการกำหนด left hand rule และ righ hand rule ขึ้นมา ดังนี้

  ♦ กรณีใช้ Left hand rule : หงายฝ่ามือซ้ายขึ้น กางนิ้งโป้งออกให้ตั้งฉากกับฝ่ามือ ทิศที่นิ้วโป้งชี้จะเป็นทิศของ Z+ ทิศที่นิ้วชี้ชี้ไปจะเป็นทิศของ X+ ยกนิ้วกลางขึ้นให้ตั้งฉากกับฝ่ามือ ทิศที่นิ้วกลางชี้ไปเป็นทิศของ Y+ (หรืออาจใช้ทิศของฝ่ามือก็ได้)

  ♦ กรณีใช้ Right hand rule : เปลี่ยนไปใช้มือขวาแล้วทำเช่นเดียวกับ left hand rule จะได้ว่าทิศของนิ้วโป้งคือ Z+ ทิศของนิ้วชี้คือทิศของ X+ และฝ่ามือคือทิศของ Y+


รูปที่ 5

Polar coordinates


ระบบ polar coordinate เป็นการระบุตำแหน่งในมุมมอง 2D โดยใช้จุดอ้างอิงที่เทียบได้กับจุด origin ในระบบ cartesian เรียกว่า (Pole) ตำแหน่งของวัตถุระบุด้วยตัวเลข 2 ตัว (r,\(\theta\)) (บางคนอาจใช้ \( \rho \) แทน r) โดย \( r \) คือระยะห่างระหว่าง pole กับวัตถุ และ \( \theta \) คือมุมที่วัดจากแกน polar axis ไปยังวัตถุ ไม่ได้มีการระบุว่า polar axis ต้องชี้ไปทางไหนแต่มักจะถูกกำหนดให้เป็นแกนเดียวกันกับ X+ axis ในระบบ cartesian coordinates


รูปที่ 6

การวัดค่าของ \(\theta\) จะเริ่มต้นจาก polar axis (แนวเดียวกับแกน X+) โดยที่อาจมีเครื่องหมายลบ(-)หรือไม่ก็ได้ ในกรณีที่มีเครื่องหมายลบหมายถึงการวัดมุมในทิศตามเข็มนาฬิกา (clockwise) หากไม่มีเครื่องหมายลบจะเป็นวัดในทิศทางทวนเข็มนาฬิกา (counterclockwise)


รูปที่ 7

ระบบ polar coordinates มีการแบ่งพื้นที่ออกเป็นตาราง (grid) เพื่อใช้ระบุ coordinate เช่นเดียวกับ cartesian coordinates แต่อยู่ในรูปแบบของมุมและระยะทาง ดังรูปที่ 8 เช่นจุดสีแดง ตั้งอยู่บน coordinate ที่ (6,\(45^{\circ}\)) หมายถึง จุดสีแดงอยู่ห่างจากจุด pole (origin) ไปทางขวา 6 หน่วย ทำมุม \( 45^{\circ}\) กับ polar axis

รูปที่ 8

การเทียบ \( \theta \) กับ quadrant :

ระบบ polar coordinates ไม่มีการแบ่งพื้นที่เป็น quadrant เพราะมีแกนเดียว การเทียบเป็น quadrant ต้องใช้ค่าของ \(\theta \) ดังแสดงในรูปที่ 9


รูปที่ 9

การแปลง (r,\(\theta\)) ไปเป็น coordinate (x,y) :

จะใช้การคำนวณจาก trigonometry เพื่อคำนวณหาจุดที่ r ฉายลงบนแกน X และแกน Y ถ้าให้จุดสีแดงในรูปที่ 10 มี coordinate เป็น (r,\( \theta \))

รูปที่ 10

จะได้ว่า

\[ \begin{align*} sin(\theta) &= \frac{y}{r}\\ r \cdot sin(\theta) &= y \\\\\\ cos(\theta) &= \frac{x}{r}\\ r \cdot cos(\theta) &= x \\\\\\ \end{align*} \]

การแปลงจาก polar coordinate ไปยัง cartesian coordinate จะใช้สมการ

\[ \begin{align*} (x,y) = (r \cdot cos(\theta),r \cdot sin(\theta)) \tag{1.0} \end{align*} \]

(1.0) ใช้ได้เมื่อ \(\theta \) มีค่าระหว่ง [\( 0^{\circ}, 90^{\circ} \) ] หรือ quadrant ที่ 1 ในกรณีที่ \( \theta \) ไม่ได้อยู่ในช่วงนี้ จะต้องทำการปรับค่าของมุมให้เหมาะสมดังนี้

ค่าของ \( \theta \)ค่าของ (x,y)
(\( 0^{\circ}, 90^{\circ} \) ] \( \begin{align*} x &= r \cdot cos(\theta) \\ y&=r \cdot sin(\theta) \end{align*}\)
(\( 90^{\circ}, 180^{\circ} \) ] \( \begin{align*} x &= -r \cdot cos(180^{\circ} - \theta) \\ y&=r \cdot sin(180^{\circ}-\theta) \end{align*}\)
(\( 180^{\circ}, 270^{\circ} \) ] \( \begin{align*} x &= -r \cdot cos(\theta - 180^{\circ} ) \\ y&=-r \cdot sin(\theta - 180^{\circ}) \end{align*}\)
(\( 270^{\circ}, 360^{\circ} \) ] \( \begin{align*} x &= r \cdot cos(360^{\circ} -\theta ) \\ y&=-r \cdot sin(360^{\circ} - \theta ) \end{align*}\)

การแปลงจาก (x,y) ไปเป็น (r,\( \theta\)) :

ใช้ Pythagoras theorem มาแปลงค่าของ x,y ไปเป็นค่า r จากรูปที่ 10 จะได้

\[ \begin{align*} r^2 &= x^2 + y^2 \\ \therefore r &= \sqrt{x^2 + y^2} \tag{1.1} \end{align*} \]

จากตอนก่อนหน้า เราทราบว่าง

\[ \begin{align*} \frac{y}{x} &= \frac{r\cdot sin(\theta)}{r\cdot cos(\theta)}\\ \frac{y}{x} &= tan(\theta)\\ \therefore \theta &= tan^{-1}(\theta) \tag{1.2} \end{align*} \]

นั่นคือ (x,y) \(\rightarrow (\sqrt{x^2 + y^2},tan^{-1}(\theta)) \)

ความคิดเห็น