เส้นวงกลมขนาดใหญ่ในการฉายภาพ Equirectangular


12

เพียงเพื่อตรวจสอบว่าฉันอยู่ในเส้นทางที่ถูกต้อง:

วงกลมใหญ่ทั้งหมดอยู่ในทรงกลมและในการฉายภาพทางอ้อม (เช่นละติจูด, ลองจิจูดคู่):

  1. เส้นเมอริเดียน (เช่นไปขั้วโลก)
  2. ของแบบฟอร์ม tan latitude = sin360(longitude + rotation) * amplitude + offset

(ด้วยข้อ จำกัด เพิ่มเติมเกี่ยวกับการรวมกันของออฟเซ็ต / แอมพลิจูด - เห็นได้ชัดว่าเส้นทางวงกลมที่ยิ่งใหญ่ทั้งหมดที่มีแอมพลิเคชั่น 0 ยังมีออฟเซต 0 - เส้นศูนย์สูตรด้วย)

หรือมีเส้นทางวงกลมขนาดใหญ่ที่ไม่เหมาะกับรูปแบบนี้ (อีกครั้งเฉพาะในระบบพิกัดละติจูด - ลองจิจูดไม่ใช่บนแผนที่อื่น ๆ )

หมายเหตุ: ฉันได้เพิ่มtanข้างต้นหลังจากโพสต์คำถามในการตอบสนองต่อการตอบที่ดีเยี่ยม whubers ปรากฎว่าoffsetเป็น 0 เสมอ


แบบฟอร์ม # 2 ไม่ใช่ชุดของคู่ (ละติจูด, ลองจิจูด) มันหมายความว่าอะไร? และทำไมมันขึ้นอยู่กับพารามิเตอร์สามตัว ( rotation, amplitudeและoffset) เมื่อวงกลมใหญ่โดยธรรมชาติมีเพียงสองพารามิเตอร์เท่านั้น (แต่ละอันนั้นตรงกับคู่ของจุดตรงข้ามที่มีเส้นผ่านศูนย์กลางที่เป็น "ขั้ว")?
whuber

ใช่หนึ่งซ้ำซ้อน แต่ฉันไม่ได้มีสูตรพร้อม ตามที่ระบุไว้amplitude==0แสดงถึงoffset=0; ทั้งสองนี้เชื่อมต่อกันอย่างชัดเจน ดูคำถามที่อัปเดตสำหรับคนที่หายไปlatitudeเพื่อให้ความสัมพันธ์มีรูปแบบที่ดี
Erich Schubert

คำตอบ:


11

แม้ว่า geodesics จะดูเหมือนคลื่นไซน์เล็กน้อยในการคาดการณ์บางสูตรไม่ถูกต้อง

นี่คือหนึ่งเนื้อที่ในการประมาณการ Equirectangular เห็นได้ชัดว่ามันไม่ใช่คลื่นไซน์:

ป้อนคำอธิบายรูปภาพที่นี่

(ภาพพื้นหลังนำมาจากhttp://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Equirectangular-project.jpg/800px-Equirectangular-project.jpg )

เนื่องจากการคาดการณ์ Equirectangular ทั้งหมดเป็นการแปลงเลียนแบบของอันนี้ (โดยพิกัด x คือลองจิจูดและพิกัด y คือละติจูด) และการแปลงเลียนแบบของคลื่นไซน์ยังคงเป็นคลื่นไซน์เราไม่สามารถคาดหวังว่า geodesics ในรูปแบบใด ๆ การฉายภาพแบบสามเหลี่ยมด้านเท่าเป็นคลื่นไซน์ (ยกเว้นเส้นศูนย์สูตรซึ่งแปลงเป็นเส้นแนวนอน) งั้นเริ่มจากจุดเริ่มต้นและหาสูตรที่ถูกต้อง

ปล่อยให้สมการของ geodesic ดังกล่าวอยู่ในรูปแบบ

latitude = f(longitude)

สำหรับฟังก์ชั่นFจะพบ (วิธีนี้เลิกใช้แล้วกับเส้นเมอริเดียนซึ่งไม่สามารถเขียนในรูปแบบดังกล่าวได้ แต่เป็นแบบทั่วไปอย่างสมบูรณ์) การแปลงเป็นพิกัดคาร์ทีเซียน 3D (x, y, z) ให้

x = cos(l) cos(f(l))
y = sin(l) cos(f(l))
z = sin(f(l))

โดยที่lคือลองจิจูดและรัศมีของยูนิทจะถูกสมมติขึ้น เนื่องจาก geodesics บนทรงกลมเป็นจุดตัดกับระนาบ (ผ่านจุดศูนย์กลาง) จึงต้องมีเวกเตอร์คงที่ (a, b, c) - ซึ่งอยู่ระหว่างเสาของ geodesic - ซึ่ง

a x + b y + c z = 0

ไม่ว่ามูลค่าของlอาจเป็นเท่าใด การแก้หา f (l)

f(l) = ArcTan(-(a cos(l) + b sin(l)) / c)

ให้cเป็นที่ไม่ใช่ศูนย์ เห็นได้ชัดว่าเมื่อเข้าใกล้ 0, เราได้รับในวงเงินคู่ของเส้นเมอริเดียนที่แตกต่างกันโดย 180 องศา - แม่นยำ geodesics ที่เราทิ้งไว้ที่เริ่มแรก ดังนั้นทั้งหมดเป็นสิ่งที่ดี อย่างไรก็ตามแม้จะมีลักษณะที่ปรากฏนี้ใช้เพียงสองพารามิเตอร์เท่ากับ a / c และ b / c

โปรดทราบว่าธรณีวิทยาทั้งหมดสามารถหมุนได้จนกว่าพวกเขาจะผ่านเส้นศูนย์สูตรที่ศูนย์องศาแวง นี่เป็นการบ่งบอกว่า f (l) สามารถเขียนได้ในรูปของ f0 (l-l0) โดยที่ l0 คือลองจิจูดของการข้ามเส้นศูนย์สูตรและ f0 คือการแสดงออกของการข้ามทางภูมิศาสตร์ที่ Prime Meridian จากนี้เราได้สูตรเทียบเท่า

f(l) = ArcTan(gamma * sin(l - l0))

โดยที่ -180 <= l0 <180 องศาเป็นลองจิจูดของการข้ามเส้นศูนย์สูตร (ขณะที่ธรณีวิทยาเข้าสู่ซีกโลกเหนือเมื่อเดินทางไปทางตะวันออก) และแกมม่าเป็นจำนวนจริงบวก นี่ไม่รวมคู่เที่ยงวัน เมื่อgamma = 0 มันกำหนดเส้นศูนย์สูตรด้วยจุดเริ่มต้นที่ลองจิจูด l0; เราอาจใช้ l0 = 0 ในกรณีนั้นเสมอหากเราต้องการสร้างพารามิเตอร์ที่ไม่ซ้ำ ยังมีเพียงสองพารามิเตอร์ที่กำหนดโดย l0 และแกมม่าในครั้งนี้


Mathematica 8.0 ถูกใช้เพื่อสร้างภาพ ในความเป็นจริงมันสร้าง "การจัดการแบบไดนามิก" ซึ่งเวกเตอร์ (a, b, c) สามารถควบคุมและ geodesic ที่เกี่ยวข้องจะปรากฏขึ้นทันที (มันเจ๋งทีเดียว) ก่อนอื่นเราจะได้ภาพพื้นหลัง:

i = Import[
   "http://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/\
    Equirectangular-projection.jpg/800px-Equirectangular-projection.jpg"]

นี่คือรหัสทั้งหมด:

Manipulate[
 {a, b, c} = {Cos[u] Cos[v], Sin[u] Cos[v], Sin[v]};
 Show[Graphics[{Texture[i], 
    Polygon[{{-\[Pi], -\[Pi]/2}, {\[Pi], -\[Pi]/2}, {\[Pi], \[Pi]/2}, {-\[Pi], \[Pi]/2}}, 
     VertexTextureCoordinates -> {{0, 0}, {1, 0}, {1, 1}, {0, 1}}]}], 
  Plot[ArcTan[(a Cos[\[Lambda]] + b Sin[\[Lambda]]) / (-c)], {\[Lambda], -\[Pi], \[Pi]}, 
   PlotRange -> {Automatic, {-\[Pi]/2, \[Pi]/2}}, PlotStyle -> {Thick, Red}]],
   {u, 0, 2 \[Pi]}, {v, -\[Pi]/2, \[Pi]}]

ขอบคุณ ฉันทำมันหายไปarctanไหนซักแห่ง ฉันเดาว่าเริ่มจากarctan latitudeที่ไหนซักแห่ง
Erich Schubert

ฉันหวังว่าฉันจะลงคะแนนได้มากกว่าหนึ่งครั้ง!
Ian Turton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.