สร้างแผนที่ท้องฟ้ายามค่ำคืนแบบ SVG ที่โต้ตอบได้ แสดงกลุ่มดาวที่มองเห็นได้ตามวันที่ เวลา และสถานที่ มีฟีเจอร์ตรวจจับอัตโนมัติหรือการป้อนพิกัดด้วยตนเอง ชื่อกลุ่มดาว ตำแหน่งดาว และเส้นขอบฟ้า
แอพดูดาวเป็นเครื่องมือที่ทรงพลังสำหรับผู้ที่สนใจด้านดาราศาสตร์และผู้ที่ชอบดูดาว มันช่วยให้ผู้ใช้สามารถมองเห็นท้องฟ้ายามค่ำคืนและระบุกลุ่มดาวที่มองเห็นได้ตามสถานที่ วันที่ และเวลา แอพพลิเคชั่นเชิงโต้ตอบนี้มีแผนที่ท้องฟ้ายามค่ำคืนแบบ SVG ที่เรียบง่าย แสดงชื่อกลุ่มดาว ตำแหน่งดาวพื้นฐาน และเส้นขอบฟ้า ทั้งหมดในอินเทอร์เฟซหน้าเดียว
แอพใช้การรวมกันของพิกัดดาราศาสตร์และการคำนวณเวลาเพื่อตัดสินใจว่ากลุ่มดาวใดที่มองเห็นได้ในท้องฟ้ายามค่ำคืน:
การขึ้นตรง (RA) และการลดลง (Dec): นี่คือเทียบเท่าดาราศาสตร์ของลองจิจูดและละติจูดตามลำดับ RA วัดเป็นชั่วโมง (0 ถึง 24) และ Dec วัดเป็นองศา (-90° ถึง +90°)
เวลาเฉพาะท้องถิ่น (LST): คำนวณโดยใช้ลองจิจูดของผู้สังเกตและวันที่และเวลาปัจจุบัน LST จะกำหนดว่าส่วนใดของทรงกลมดาราศาสตร์ที่อยู่เหนือศีรษะในขณะนั้น
มุมชั่วโมง (HA): นี่คือระยะมุมระหว่างเมอริเดียนและวัตถุดาราศาสตร์ คำนวณได้ดังนี้:
ความสูง (Alt) และทิศ (Az): คำนวณโดยใช้สูตรต่อไปนี้:
โดยที่ Lat คือ ละติจูดของผู้สังเกต
แอพดำเนินการตามขั้นตอนต่อไปนี้เพื่อตัดสินใจเกี่ยวกับกลุ่มดาวที่มองเห็นได้และสร้างแผนที่ท้องฟ้า:
แอพดูดาวมีการใช้งานที่หลากหลาย:
ในขณะที่แอพดูดาวของเราให้วิธีที่เรียบง่ายและเข้าถึงได้ในการดูท้องฟ้ายามค่ำคืน ยังมีเครื่องมืออื่น ๆ ที่มีอยู่:
ประวัติศาสตร์ของการทำแผนที่กลุ่มดาวและแผนที่ดาวมีมาตั้งแต่หลายพันปี:
แอพใช้ฐานข้อมูลกลุ่มดาวที่เรียบง่ายซึ่งเก็บไว้ในไฟล์ TypeScript:
1export interface Star {
2 ra: number; // การขึ้นตรงในชั่วโมง
3 dec: number; // การลดลงในองศา
4 magnitude: number; // ความสว่างของดาว
5}
6
7export interface Constellation {
8 name: string;
9 stars: Star[];
10}
11
12export const constellations: Constellation[] = [
13 {
14 name: "Ursa Major",
15 stars: [
16 { ra: 11.062, dec: 61.751, magnitude: 1.79 },
17 { ra: 10.229, dec: 60.718, magnitude: 2.37 },
18 // ... ดาวเพิ่มเติม
19 ]
20 },
21 // ... กลุ่มดาวเพิ่มเติม
22];
23
โครงสร้างข้อมูลนี้ช่วยให้การค้นหาและการเรนเดอร์กลุ่มดาวมีประสิทธิภาพ
แอพใช้ D3.js เพื่อสร้างแผนที่ท้องฟ้ายามค่ำคืนแบบ SVG นี่คือตัวอย่างที่เรียบง่ายของกระบวนการเรนเดอร์:
1import * as d3 from 'd3';
2
3function renderSkyMap(visibleConstellations, width, height) {
4 const svg = d3.create("svg")
5 .attr("width", width)
6 .attr("height", height)
7 .attr("viewBox", [0, 0, width, height]);
8
9 // วาดพื้นหลังท้องฟ้า
10 svg.append("circle")
11 .attr("cx", width / 2)
12 .attr("cy", height / 2)
13 .attr("r", Math.min(width, height) / 2)
14 .attr("fill", "navy");
15
16 // วาดดาวและกลุ่มดาว
17 visibleConstellations.forEach(constellation => {
18 const lineGenerator = d3.line()
19 .x(d => projectStar(d).x)
20 .y(d => projectStar(d).y);
21
22 svg.append("path")
23 .attr("d", lineGenerator(constellation.stars))
24 .attr("stroke", "white")
25 .attr("fill", "none");
26
27 constellation.stars.forEach(star => {
28 const { x, y } = projectStar(star);
29 svg.append("circle")
30 .attr("cx", x)
31 .attr("cy", y)
32 .attr("r", 5 - star.magnitude)
33 .attr("fill", "white");
34 });
35
36 // เพิ่มชื่อกลุ่มดาว
37 const firstStar = projectStar(constellation.stars[0]);
38 svg.append("text")
39 .attr("x", firstStar.x)
40 .attr("y", firstStar.y - 10)
41 .text(constellation.name)
42 .attr("fill", "white")
43 .attr("font-size", "12px");
44 });
45
46 // วาดเส้นขอบฟ้า
47 svg.append("line")
48 .attr("x1", 0)
49 .attr("y1", height / 2)
50 .attr("x2", width)
51 .attr("y2", height / 2)
52 .attr("stroke", "green")
53 .attr("stroke-width", 2);
54
55 return svg.node();
56}
57
58function projectStar(star) {
59 // แปลง RA และ Dec เป็นพิกัด x, y
60 // นี่คือการฉายที่เรียบง่ายและควรแทนที่ด้วยการฉายดาราศาสตร์ที่เหมาะสม
61 const x = (star.ra / 24) * width;
62 const y = ((90 - star.dec) / 180) * height;
63 return { x, y };
64}
65
แอพจัดการกับเขตเวลาและสถานที่ที่แตกต่างกันโดยการ:
ในขณะที่แอพไม่ได้คำนึงถึงมลพิษทางแสงโดยตรง ผู้ใช้ควรทราบว่า:
เส้นขอบฟ้าจะถูกคำนวณตามตำแหน่งของผู้สังเกต:
แอพคำนึงถึงความแปรผันตามฤดูกาลในกลุ่มดาวที่มองเห็นได้โดยการ:
ค้นพบเครื่องมือเพิ่มเติมที่อาจมีประโยชน์สำหรับการทำงานของคุณ