Syntymäkaavio laskettu puhtaalla PHP:llä ilman astrologiakirjastoa

Sillä hetkellä, kun horoskooppi-API-projekti tarvitsi syntymäkaaviolaskelmia, mukavat sisällön luontialueen päättyi ja epätutussa kiertorataharmonian alueella alkoi. Syntymäkaavio on kartta taivaasta syntymän hetkellä ja paikalla, joka näyttää, missä kukin planeetta näkyi suhteessa kahteentoista horoskooppimerkiksi ja kahteentoista astrologiseen taloon. Tämän kartan laskeminen vaatii kunkin planeetan ekliptisen pituusasteen tuntemusta tietyllä hetkellä, mikä tarkoittaa planeetan sijainnin laskentaongelman ratkaisemista: annetulla päivämäärällä, kellonajalla ja sijaintilla Maassa, missä kukin planeetta oli taivaalla? Tämä on pohjimmiltaan tähtitieteen ongelma, ja vaihtoehdot sen ratkaisemiselle olivat käyttää olemassa olevaa tähtitieteen kirjastoa tai rakentaa laskelmat alusta alkaen.

Olemassa olevan kirjaston vaihtoehto oli yksinkertainen käsitteellisesti, mutta ongelmallinen käytännössä. Suurin osa tähtitieteen kirjastoista on kirjoitettu Python:illa (Skyfield, AstroPy) tai C:llä (Swiss Ephemeris), ja niiden integroiminen web-sovellukseen vaatisi joko ulkoisen funktiokäyttöliittymän, aliprosesSikutsu kutsumisen erilliseen prosessiin tai mikropalveluarkkitehtuurin, joka lisää käyttöönottokompleksisuutta. Swiss Ephemeris on astrologisen ohjelmiston kultastandardi ja tuottaa positioita tarkkuudella murto-osaa kaarisekuntiin asti, mutta C-kirjaston kääriminen web-sovellukseen ottaa käyttöön riippuvuuksien hallinnan haasteet, mahdolliset muistin turvallisuusongelmat ja rakennusvaiheen, joka vaikeuttaa käyttöönottoa tavallisiin isännöintiympäristöihin. Python-kirjastot ovat yhtä tarkkoja, mutta vaativat erillisen Python-prosessin ylläpitoa pääsovelluksen rinnalla.

Kolmas vaihtoehto, laskelmien rakentaminen palvelinpuolella, oli teknisesti kunnianhimoisin, mutta myös operatiivisesti yksinkertaisin. Palvelinpuolisella toteutuksella ei ole ulkoisia riippuvuuksia, se otetaan käyttöön sovelluksen loput ilman erikoisia rakennusvaiheita, ja se toimii samassa prosessiavaruudessa kuin web-pyyntö ilman aliprosesin yleiskustannuksia. Vaihto on tarkkuus: alusta alkaen rakennettu toteutus yksinkertaistettujen kiertorataelementtien avulla ei vastaa Swiss Ephemeriksen kaarisekunnin tarkkuutta. Mutta astrologiset laskelmat eivät vaadi kaarisekunnin tarkkuutta. Asema, joka on tarkka asteen sisällä, on riittävä horoskooppimerkki, jonka planeetta miehittää, ja tarkkuus puolen asteen sisällä riittää aspektien (planeettaujen välisten kulmasuheiden) laskemiseen luotettavilla tuloksilla. Päätös tehtiin rakentaa se palvelinpuolelle, hyväksymällä pieni tarkkuuden vaihto operatiivisen yksinkertaisuuden ja nolla-riippuvuuksien vastineeksi.

Keplerian kiertorataelementit ja kuinka planeetat liikkuvat

Jokainen aurinkokuntamme planeetta noudattaa elliptistä kiertorataa Auringon ympärillä, ja tämä kiertorata voidaan kuvata kuudella numerolla, joita kutsutaan kiertorataelementeiksi. Nämä elementit määrittelevät ellipsin koon ja muodon, kiertoratatason suunnan suhteessa ekliptikkaan (Maan kiertoratataso) ja planeetan aseman ellipsillä viitetapahtumassa. Näistä kuudesta numerosta ja ajan kulumisesta planeetan asema missä tahansa hetkellä voidaan laskea matemaattisten muunnosten sarjan avulla, joka muuntaa abstraktin kiertoratatakuvauksen konkreetiksi sijainnin taivaalla.

Kuusi elementtiä ovat: puolipääakseli (keskimääräinen etäisyys Auringosta), eksentrissyys (kuinka pitkänomainen kiertorata on verrattuna ympyrään), kaltevuus (kiertoratatason kaltevuus), nousevan solmun pituusaste (missä kiertoratatasolla ristii ekliptikka), perihelionin argumentti (ellipsin suunta kiertorata-tasossa) ja keskimääräinen anomalia aikakauden (planeetan asema viitetapahtumassa). NASA ja muut tähtitieteelliset virastot julkaisevat nämä arvot kaikille planeetoille sekä muutostahdit, jotka huomioivat kiertorataelementtien hitaan ajautumisen vuosisatojen ajan planeettausien välisten painovoimavuorovaikutusten vuoksi.

PHP-toteutus alkaa näillä julkaistuilla kiertorataelementtiarvoilla jokaiselle planeetalle, jotka on tallennettu vakioina koodissa. Tietyllä päivämäärällä laskenta laskee J2000-kaudesta (tammikuu 1, 2000 keskipäivällä) kuluneet vuosisadat, soveltaa muutosnopeuden jokaiseen elementtiin ja saapuu nykyisiin kiertorataelementteihin. Sieltä keskimääräinen anomalia lasketaan, joka edustaa planeetan keskimääräistä kulmaasemaa sen kiertoradalla. Keskimääräinen anomalia muutetaan sitten epäkeskiseksi anomaliaksi Keplerin yhtälön kautta, iteratiivinen laskenta, joka huomioi planeetan epäyhteneväisen nopeuden liikkuessa elliptisellä polulla. Epäkeskinen anomalia antaa todellisen anomalian, joka antaa planeetan todellisen kulmaaseman, ja sieltä heliokentrisista koordinaateista (asema suhteessa aurinkoon) lasketaan.

Heliosentrisestä geosentriseen ja näkymä Maasta

Heliokentriset koordinaatit kuvaavat, missä planeetta on suhteessa aurinkoon, mutta syntymäkaavio kuvaa, missä planeetta näkyy Maasta. Muunnos heliokentrisista geosentrisiin koordinaatteihin on yksi keskeisista muunnoksista laskentajärjestelmässä. Siihen kuuluu Maan oman heliokentrisen aseman laskeminen samalla kiertorataelementillämenetelmällä, sitten planeetan aseman ja Maan aseman välisen vektorieron laskeminen. Tämä vektoriero antaa planeetan aseman Maasta nähtynä, joka voidaan sitten ilmaista ekliptisen pituusasteiden seurauksena: kulmasija zodiaakissa, joka määrää horoskooppimerkin, jonka planeetta miehittää.

Ekliptinen pituusaste on numero, joka on astrologisista tarkoituksista tärkein. Zodiakki on jaettu kahteentoista merkiksi 30 astetta kukin, alkaen Oinasta 0 asteesta. Planeetta ekliptisella pituusasteella 45 astetta on 15 astetta Härän merkillä (45 miinus 30 Oinas). Planeetta 187 asteessa on 7 astetta Vaaka-merkillä (187 miinus 180 Neitsyt ensimmäisen 180 asteen kautta). Tämä yksinkertainen jako kartoittaa lasketun sijainnin zodiakkin pyörään, joka muodostaa syntymäkaavioin perustan.

PHP-koodi suorittaa tämän koko laskentaketjun yhdessä funktiossa, joka ottaa syötteenä Julian-päivämäärän ja palauttaa planeetan sijainnin matriisin. Julian-päivämäärä on jatkuva päivälaskenta, jota käytetään tähtitieteessä ja joka yksinkertaistaa päiväaritmeettisesti vuosisatojen ja kalenterijärjestelmien yli. Vakiokalkenterin päivämäärän muuntaminen Julian-päivämääräksi on yksinkertainen kaava, ja sieltä kiertoratalaskelmat jatkavat kalenteriin liittyvien erikoisuuksien, kuten karkausvuosien, aikavyöhykkeiden tai kesäaikasiirtymien ilman. Alusta käsittelee päivämuunnoksen läpinäkyvästi, hyväksyen vakio päivämäärä-aika-tuloitukset API-kuluttajalta ja muuntaen sisäisesti Julian-päivämääriin tähtitieteellisille laskelmille.

Talot ja paikallinen horisontti

Planeetan sijainnit horoskooppimerkkeissä kertovat puolet syntymäkaaviosta. Toinen puoli tulee talojärjestelmästä, joka jakaa taivaan kahteentoista sektoriin paikallisen horisontin perusteella syntymän hetkellä ja paikalla. Nouseva merkki (tai nouseva merkki) on zodiakkin aste, joka nousi itäisellä horisontilla syntymän aikaan, ja se merkitsee ensimmäisen talon alkua. Meridiaani on zodiakkin aste taivaankorkeimmalla pisteessä, merkitsemällä kymmenennen talon alkua. Loput talot jaetaan näiden ankkuripisteiden välille jonka talojärjestelmän välillä käytetään.

Nousevan merkin laskeminen vaatii paikallisen tähtitieteen ajan syntymäpaikalla, joka riippuu maantieteellisesta pituusasteesta ja ajasta. Tähtitieteen aika edustaa Maan pyörimistä kiinteiden tähtien suhteen, ja se määrää, mikä zodiakkin osa on horisontin yläpuolella missä tahansa hetkellä ja paikassa. PHP-toteutus laskee Greenwichin keskimääräisen tähtitieteen ajan Julian-päivämäärästä käyttämällä vakiopolynomin likiarvoa, sitten muuttaa havaitsijan pituusastetta paikallisen tähtitieteen ajan saamiseksi. Paikallisen tähtitieteen ajalta ja havaitsijan leveysasteelta, Nousevan merkin ja Meridiaanin lasketaan käyttämällä trigonometrisia kaavoja, jotka liittävät taivaallisen pallon paikalliseen horisonttiin.

Toteutuksessa käytetty talojärjestelmä on Placidus-järjestelmä, joka on eniten käytetty länsimaisen astrologian järjestelmä. Placidus-talot lasketaan kolmiimella ekliptikan päivä- ja yöpallit, jotka tuottavat talon rajoja, jotka vaihtelevat leveysasteen kanssa ja luovat epäyhtenäisen kokoisia taloja. Laskenta sisältää iteratiivisia ratkaisuja transkendentteihin yhtälöihin, samanluontoisesti kuin Keplerin yhtälön ratkaiseminen planeetan sijainneille. PHP-toteutus käyttää Newtonin menetelmää näille iteraatioille, konvergoituu riittävään tarkkuuteen muutamassa iteraatiossa kaikilla käytännön leveysasteilla. Tulos on täydellinen joukko kahtatoista talon rajaa, jotka yhdessä planeetan sijainnin kanssa tuottavat täydellisen syntymäkaaviodatastruktuurin, jonka API palauttaa kuluttajalle.

Aspektit ja suhteet planeettojen välillä

Syntymäkaaviolaskennan viimeinen kerros on aspektien havaitseminen: merkitsevien kulmasuheiden tunnistaminen planeettojen välillä. Aspekti tapahtuu, kun kaksi planeettaa erotellaan tietyllä kulmallisella etäisyydellä, mitattuna ekliptikan varrella. Merkittävät aspektit perinteisessä astrologiassa ovat yhdessä (0 astetta), sekstiilit (60 astetta), neliöt (90 astetta), trigonid (120 astetta) ja oppositio (180 astetta). Jokainen aspekti katsotaan merkitseväksi orbin sisällä, toleranssialue, joka vaihtelee aspektityypin ja osallistuvien planeettojen mukaan. Yhdessä voidaan katsoa olevan voimassa orbin 8 asteen sisällä, eli kaikki kaksi planeettaa 8 asteen sisällä muodostavat yhdessä olevan aspektin.

PHP-toteutus laskee aspektit laskemalla kulmalisen eron jokaisen planeetaparin välillä ja tarkistamalla, putoaako tämä ero minkään määritetyn aspektin orbiin. Kulmallisen eron laskenta huomioi zodiakkin ympyränluonteen, joten kaksi planeettaa 5 asteessa ja 355 asteessa tunnistetaan oikein olevan 10 astetta toisistaan poiketen 350 asteesta. Orbin arvot ovat konfiguroitavissa alustan astrologian konfiguraation kautta, mikä mahdollistaa aspektien havaitsemisen tiukkuuden säätämisen. Tiukemmat orbit tuottavat vähemmän, mutta merkittävämpiä aspekteja. Laajemmat orbit tuottavat enemmän aspekteja, mutta sisältävät heikkompia yhteyksiä, joita jotkut astrologit pitävät vähemmän merkityksellisiä.

Täydellinen syntymäkaaviolaskenta, päivämäärän syötöstä planeetan sijainteihin, talon rajoihin ja aspektin havaitsemiseen, suoritetaan alle 50 millisekunnin kuluessa tavallisella palvelimella. Tämä suorituskyky tekee siitä elinkelpoiseksi synkronisena laskelmana API-pyynnössä ilman taustatyöskenttelyä tai väliaikaisten tulosten välimuistia. Palvelinpuolinen toteutus, huolimatta siitä, että se on teknisesti vähemmän tarkka kuin Swiss Ephemeris, tuottaa positioita, jotka ovat astrologiselle tulkinnalle riittävän tarkkoja ja reaaliaikaisille API-vastauksille riittävän nopeita. Ulkoisten riippuvuuksien puuttuminen tarkoittaa, että laskenta toimii kaikkialla, missä PHP toimii, ilman muita infrastruktuurivaatimuksia kuin tavallinen sovelluspalvelin, joka isännöi loput alustaa.

Usein kysytyt kysymykset

Kuinka tarkkoja planeetan sijainnit ovat verrattuna ammatillisen tähtitieteen ohjelmistoon

Yksinkertaistetut Keplerian-elementit tuottavat positioita tarkuudella noin 1 asteen sisällä useimmille planeetoille useiden vuosikymmenten ajanjakson yli nykyhetken ympärillä. Tämä on enemmän kuin riittävä astrologisille tarkoituksille, joissa horoskooppimerkki (30 asteen sektorit) ja aspektien havaitseminen (5-10 asteen orbilla) ovat ensisijaiset käyttötarkoitukset. Se ei ole sopiva tarkkuuden tähtitieteen sovelluksiin kuten avaruusalus-navigointiin.

Mitkä planeetat sisältyvät syntymäkaaviolaskelmaan

Laskenta sisältää Auringon, Kuun, Elohopean, Venuksen, Marsin, Jupiterin, Saturnuksen, Uranuksen, Neptunuksen ja Pluton. Kuun asema käyttää erillistä laskentamallia, koska Kuu kiertää Maata Auringon sijaan, ja vaatii geosentrisisiä kiertorataelementtejä heliosentrististen sijaan.

Miksi PHP valittiin tuloksellisemmalle kielelle

Laskelmien rakentaminen palvelinpuolelle eliminoi erillisen palvelun ylläpidon monimutkaisuuden toisella kielellä. Suorituskyky on enemmän kuin riittävä, täydellinen syntymäkaaviolaskenta valmistuu alle 50 millisekunnin kuluessa, mikä on riittävän nopeaa synkronisille API-vastauksille.

Huomioiko toteutus retrograde-liikkeen

Kyllä. Retrograde-liike on geosentristä koordinaattimuunnoksesta johtuva luonnollinen seuraus. Kun Maa ohittaa hitaamman ulkoisen planeetan tai sisäinen planeetta kulkee Maan ja Auringon välillä, laskettu geosentristä pituusaste luonnollisesti vähenee, joka tuottaa retrograde-liikkeen ilman erityistä käsittelyä koodissa.

Mitä talojärjestelmää käytetään

Toteutus käyttää Placidus-talojärjestelmää, joka on eniten käytetty länsimaisen astrologian järjestelmä. Placidus-talot ovat leveysaste-riippuvaisia ja tuottavat epäyhtenäisen kokoisia taloja, mikä on yhdenmukaista sen kanssa, kuinka suurin osa astrologisesta ohjelmistosta ja harjoittajista tulkitsee syntymäkaavioita.

Voiko syntymäkaaviolukuja käyttää ilman AI-tulkintaa

Kyllä. Syntymäkaaviota endpoint voi palauttaa raaka asematiedot (planeetan sijainnit, talon rajat, aspektit) ilman tekoäly-tuotettua tulkintaa. Tämä vain tietotila maksaa vähemmän opintopisteitä ja on hyödyllinen kehittäjille, jotka haluavat rakentaa oman tulkintalaskeansa tähtitieteellisten laskelmien päälle.