Python: convert Rectangular coordinate to Polar coordinate

21 09 2012

20120921

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

problem: convert x,y to r , Azimuth

ก็ลองทำเป็นโจทย์พร้อมเฉลยไว้ตรวจคำตอบ
Quadrant I:    r = 25.0  theta = 48.0d   x = 18.57862064  y = 16.728265156
Quadrant II:   r = 20.0  theta = 110.5d  x = 18.73344378  y = -7.004147625
Quadrant III:   r = 18.5  theta = 212.0d x = -9.803506388 y = -15.68888978
Quadrant IV:  r = 24.0  theta = 315.5d x = -16.82182234 y = 17.11801078

คำนวณจากสูตร [x = r * sin(theta), y = r * cos(theta)]

มาดูทางฝั่งไพธอนกัน
อาศัยโมดูล cmath ที่มีฟังก์ชั่น polar(x) มาให้ใช้งานแล้วไม่ต้องติดตั้งเพิ่มมีมาในชุดไพธอนที่ลงเลย

from cmath import polar

ทีนี้การเรียกใช้ฟังก์ชั่น polar(x) ไม่ได้ง่ายอย่างที่คิด หรือเหมือนในเครื่องคิดเลข คาสิโอ
มาดูกันที่ Quadrant I: คำตอบที่ต้องการคือ r และ theta โดยเรามีค่า  x และ y
ในไพธอนต้องพิมพ์อย่างนี้

polar(16.7282651ุ+18.57862064j)

ได้คำตอบ
(25.000000000000004, 0.8377580409572782)

25.0 เป็นระยะทางส่วน 0.8377580409572782 เป็นมุม theta มีหน่วยเป็น เรเดียน
ถ้าต้องการตรวจสอบ ต้องโหลดโมดูล math เข้ามาเพื่อแปลงจาก เรเดียนเป็นองศา
หรือจะใช้วิธี radian * 180 / pi ก็ได้ แต่ก็ต้องโหลดโมดูล math หรือ cmath อยู่ดี

import math
math.degrees( 0.8377580409572782)

คำตอบคือ

48.00000000000001

มาดูตัวเลขในคำสั่งกันจะเห็นว่ามีตัว j ที่หมายถึงจำนวนเชิงซ้อนห้อยท้ายสุดอยู่
จึงจะทำงานได้ถูกต้องโดยรูปแบบคำสั่งเป็น polar(yxj) โดยในวงเล็บเป็นค่า y
ตามด้วยค่า x ที่แสดงเครื่องหมายค่านำหน้าแล้วปิดท้ายด้วยตัว j

ทีนี้ถ้าเราต้องการนำไปไว้ในส่วนของโปรแกรมเรา โดยนำค่า x และ y ไป
เป็นตัวแปรเราจะนำมันมาประกอบร่างตามที่ฟังก์ชั่น polar(x) ต้องการได้อย่างไร

x = 18.57862064
y = 16.72826516
z = ( y + x * 1j )
polar(z)

ได้คำตอบ
(25.000000000000004, 0.8377580409572782)

นำตัวแปรเข้ามารับ
r,theta = polar(z)

Quadrant III,IV ค่า Azimuth ที่ได้จะติดลบ ดังนั้นเทียบเงื่อนไขไว้ได้เลยว่าค่า
if theta<0: theta += 2*math.pi

เท่านี้ก็นำไปเขียนเป็นฟังก์ชั่นสำหรับใช้งานได้แล้วนะ


Actions

Information

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s




%d bloggers like this: