Generer et interaktivt SVG nattehimmel kort, der viser synlige konstellationer baseret på dato, tid og placering. Funktioner inkluderer automatisk registrering eller manuel koordinatindtastning, konstellationsnavne, stjerners positioner og horisontlinje.
Konstellationsvisningsappen er et kraftfuldt værktøj for astronomientusiaster og stjernekiggere. Den giver brugerne mulighed for at visualisere nattehimlen og identificere synlige konstellationer baseret på deres placering, dato og tid. Denne interaktive applikation leverer et simpelt SVG nattehimmelskort, der viser konstellationsnavne, grundlæggende stjerners positioner og en horisontlinje, alt sammen inden for en enkelt sidegrænseflade.
Appen bruger en kombination af himmelkoordinater og tidsberegninger for at bestemme, hvilke konstellationer der er synlige på nattehimlen:
Rette ascension (RA) og deklination (Dec): Disse er de himmelske ækvivalenter til længde- og breddegrader. RA måles i timer (0 til 24), og Dec måles i grader (-90° til +90°).
Lokal siderisk tid (LST): Dette beregnes ved hjælp af observatørens længdegrad og den nuværende dato og tid. LST bestemmer, hvilken del af den himmelske sfære der i øjeblikket er over hovedet.
Timevinkel (HA): Dette er den vinkelrette afstand mellem meridianen og et himmellegeme, beregnet som:
Højde (Alt) og azimut (Az): Disse beregnes ved hjælp af følgende formler:
Hvor Lat er observatørens breddegrad.
Appen udfører følgende trin for at bestemme synlige konstellationer og gengive himmelkortet:
Konstellationsvisningsappen har forskellige anvendelser:
Mens vores konstellationsvisningsapp giver en simpel og tilgængelig måde at se nattehimlen på, er der andre værktøjer tilgængelige:
Historien om konstellationskortlægning og stjernekort går tilbage tusinder af år:
Appen bruger en forenklet konstellationsdatabase gemt i en TypeScript-fil:
1export interface Star {
2 ra: number; // Rette ascension i timer
3 dec: number; // Deklination i grader
4 magnitude: number; // Stjernens lysstyrke
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 // ... flere stjerner
19 ]
20 },
21 // ... flere konstellationer
22];
23
Denne datastruktur muliggør effektiv opslag og gengivelse af konstellationer.
Appen bruger D3.js til at skabe SVG nattehimmelskort. Her er et forenklet eksempel på gengivelsesprocessen:
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 // Tegn himmelbaggrund
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 // Tegn stjerner og konstellationer
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 // Tilføj konstellationsnavn
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 // Tegn horisontlinje
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 // Konverter RA og Dec til x, y koordinater
60 // Dette er en forenklet projektion og bør erstattes med en korrekt himmelsk projektion
61 const x = (star.ra / 24) * width;
62 const y = ((90 - star.dec) / 180) * height;
63 return { x, y };
64}
65
Appen håndterer forskellige tidszoner og placeringer ved at:
Selvom appen ikke direkte tager højde for lysforurening, bør brugerne være opmærksomme på, at:
Horisontlinjen beregnes baseret på observatørens placering:
Appen tager højde for sæsonvariationer i synlige konstellationer ved at:
Opdag flere værktøjer, der måske kan være nyttige for din arbejdsgang.