Hva er en Tesseract? 4D kube 4D kubeanimasjon.


Tesseract (fra andre greske τέσσερες ἀκτῖνες - fire stråler) - en firedimensjonal hyperkube - en analog av en kube i firedimensjonalt rom.

Bildet er en projeksjon (perspektiv) av en firedimensjonal kube på et tredimensjonalt rom.

I følge Oxford Dictionary ble ordet "tesseract" laget og brukt i 1888 av Charles Howard Hinton (1853-1907) i sin bok A New Age of Thought. Senere kalte noen den samme figuren "tetrakube".

Geometri

En vanlig tesserakt i euklidisk firdimensjonalt rom er definert som det konvekse skroget av punkter (±1, ±1, ±1, ±1). Med andre ord kan det representeres som følgende sett:

Tesserakten er begrenset av åtte hyperplan, hvis skjæringspunkt med selve tesserakten definerer dens tredimensjonale ansikter (som er vanlige kuber). Hvert par ikke-parallelle 3D-flater krysser hverandre for å danne 2D-flater (firkanter) og så videre. Til slutt har en tesseract 8 3D-flater, 24 2D, 32 kanter og 16 hjørner.

Populær beskrivelse

La oss prøve å forestille oss hvordan hyperkuben vil se ut uten å forlate det tredimensjonale rommet.

I endimensjonalt "rom" - på en linje - velger vi et segment AB med lengde L. På et todimensjonalt plan i en avstand L fra AB tegner vi et segment DC parallelt med det og kobler endene deres. Få kvadratet ABCD. Ved å gjenta denne operasjonen med et plan får vi en tredimensjonal kube ABCDHEFG. Og ved å forskyve kuben i den fjerde dimensjonen (vinkelrett på de tre første) med en avstand L, får vi hyperkuben ABCDEFGHIJKLMNOP.
http://upload.wikimedia.org/wikipedia/ru/1/13/Build_tesseract.PNG

Det endimensjonale segmentet AB fungerer som en side av det todimensjonale kvadratet ABCD, kvadratet er siden av kuben ABCDHEFG, som igjen vil være siden av den firedimensjonale hyperkuben. Et rett linjestykke har to grensepunkter, et kvadrat har fire hjørner, og en terning har åtte. I en firedimensjonal hyperkube vil det altså være 16 toppunkter: 8 toppunkter av den opprinnelige kuben og 8 toppunkter forskjøvet i den fjerde dimensjonen. Den har 32 kanter - 12 hver gir den opprinnelige og siste posisjonen til den originale kuben, og 8 flere kanter "tegner" åtte av hjørnene som har beveget seg inn i den fjerde dimensjonen. Det samme resonnementet kan gjøres for ansiktene til hyperkuben. I todimensjonalt rom er det én (selve firkanten), kuben har 6 av dem (to flater fra den flyttede firkanten og fire til vil beskrive sidene). En firedimensjonal hyperkube har 24 kvadratiske flater - 12 kvadrater av den originale kuben i to posisjoner og 12 kvadrater fra tolv av kantene.

På lignende måte kan vi fortsette resonnementet for hyperkuber med et større antall dimensjoner, men det er mye mer interessant å se hvordan en firedimensjonal hyperkube vil se ut for oss, innbyggere i tredimensjonalt rom. La oss bruke den allerede kjente metoden for analogier til dette.

Tesseract utfolder seg

La oss ta trådkuben ABCDHEFG og se på den med ett øye fra siden av ansiktet. Vi vil se og kan tegne to firkanter på planet (dets nære og fjerne ansikter), forbundet med fire linjer - sidekanter. På samme måte vil en firedimensjonal hyperkube i tredimensjonalt rom se ut som to kubiske "bokser" satt inn i hverandre og forbundet med åtte kanter. I dette tilfellet vil selve "boksene" - tredimensjonale ansikter - bli projisert på "vårt" rom, og linjene som forbinder dem vil strekke seg i den fjerde dimensjonen. Du kan også prøve å forestille deg en kube ikke i projeksjon, men i et romlig bilde.

Akkurat som en tredimensjonal kube er dannet av en firkant forskjøvet med lengden på en flate, vil en kube forskjøvet inn i den fjerde dimensjonen danne en hyperkube. Den er begrenset av åtte kuber, som i fremtiden vil se ut som en ganske kompleks figur. Dens del, som forble i "vår" plass, er tegnet med heltrukne linjer, og delen som gikk inn i hyperrommet er stiplet. Selve den firedimensjonale hyperkuben består av et uendelig antall kuber, akkurat som en tredimensjonal kube kan "kuttes" til et uendelig antall flate firkanter.

Ved å kutte seks flater av en tredimensjonal kube, kan du dekomponere den til en flat figur - et nett. Den vil ha en firkant på hver side av det originale ansiktet, pluss en til - ansiktet motsatt. En tredimensjonal utvikling av en firedimensjonal hyperkube vil bestå av den originale kuben, seks kuber som "vokser" fra den, pluss en til - den endelige "overflaten".

Egenskapene til tesserakten er en forlengelse av egenskapene geometriske former lavere dimensjon inn i et firedimensjonalt rom.

projeksjoner

til todimensjonalt rom

Denne strukturen er vanskelig å forestille seg, men det er mulig å projisere en tesserakt inn i 2D- eller 3D-rom. I tillegg gjør projeksjon på et plan det enkelt å forstå plasseringen av toppunktene til hyperkuben. På denne måten kan man få bilder som ikke lenger reflekterer de romlige relasjonene i tesserakten, men som illustrerer toppunktlenkestrukturen, som i følgende eksempler:


til tredimensjonalt rom

Projeksjonen av tesserakten på det tredimensjonale rommet er to nestede tredimensjonale kuber, hvis korresponderende hjørner er forbundet med segmenter. De indre og ytre terningene har forskjellig størrelse i 3D-rom, men de er like kuber i 4D-rom. For å forstå likheten mellom alle kuber av tesseracten, ble det laget en roterende modell av tesseracten.


Seks avkortede pyramider langs kantene av tesserakten er bilder av like seks terninger.
stereo par

Et stereopar av en tesserakt er avbildet som to projeksjoner på tredimensjonalt rom. Denne skildringen av tesserakten ble designet for å representere dybde som en fjerde dimensjon. Stereoparet betraktes slik at hvert øye kun ser ett av disse bildene, det oppstår et stereoskopisk bilde som gjengir dybden av tesserakten.

Tesseract utfolder seg

Overflaten til en tesserakt kan brettes ut til åtte terninger (ligner på hvordan overflaten av en terning kan brettes ut i seks firkanter). Det er 261 forskjellige utfoldelser av tesserakten. Utfoldelsene til en tesserakt kan beregnes ved å plotte de sammenkoblede hjørnene på grafen.

Tesseract i kunsten

I Edwine A. Abbotts New Plain er hyperkuben fortelleren.
I en episode av The Adventures of Jimmy Neutron: "Boy Genius" finner Jimmy opp en firedimensjonal hyperkube som er identisk med foldboxen fra Heinleins Glory Road fra 1963.
Robert E. Heinlein har nevnt hyperkuber i minst tre science fiction-historier. I The House of Four Dimensions (The House That Teel Built) (1940) beskrev han et hus bygget som en utfoldelse av en tesseract.
I Heinleins roman Glory Road beskrives retter i hyperstørrelse som var større på innsiden enn på utsiden.
Henry Kuttners novelle "Mimsy Were the Borogoves" beskriver et pedagogisk leketøy for barn fra en fjern fremtid, lik strukturen til tesseracten.
I romanen til Alex Garland (1999) brukes begrepet "tesseract" for den tredimensjonale utfoldingen av en firedimensjonal hyperkube, snarere enn selve hyperkuben. Dette er en metafor designet for å vise at det erkjennende systemet bør være bredere enn det erkjennelige.
Handlingen til Cube 2: Hypercube sentrerer seg om åtte fremmede fanget i en "hypercube", eller nettverk av tilkoblede kuber.
TV-serien Andromeda bruker tesseract-generatorer som et konspirasjonsapparat. De er først og fremst ment å kontrollere rom og tid.
Maleriet "Crucifixion" (Corpus Hypercubus) av Salvador Dali (1954)
Nextwave-tegneserien skildrer et kjøretøy som inkluderer 5 tesseract-soner.
I albumet Voivod Nothingface heter en av låtene «In my hypercube».
I Anthony Pierces roman Route Cube kalles en av IDAs orbitalmåner en tesserakt som har blitt komprimert til 3 dimensjoner.
I serien "Skole" Svart hull"" i den tredje sesongen er det en episode "Tesseract". Lucas trykker på den hemmelige knappen og skolen begynner å ta form som en matematisk tesserakt.
Begrepet "tesseract" og begrepet "tesse" avledet fra det finnes i Madeleine L'Engles historie "Wrinkle of Time"

La oss starte med å forklare hva et firedimensjonalt rom er.

Dette er et endimensjonalt rom, det vil si ganske enkelt OX-aksen. Ethvert punkt på den er preget av én koordinat.


La oss nå tegne OY-aksen vinkelrett på OX-aksen. Så vi fikk et todimensjonalt rom, det vil si XOY-planet. Ethvert punkt på den er preget av to koordinater - abscissen og ordinaten.


La oss tegne OZ-aksen vinkelrett på aksene OX og OY. Du vil få et tredimensjonalt rom der ethvert punkt har en abscisse, en ordinat og en applikat.


Det er logisk at den fjerde aksen, OQ, skal være vinkelrett på aksene OX, OY og OZ samtidig. Men vi kan ikke konstruere en slik akse nøyaktig, og derfor gjenstår det bare å prøve å forestille seg den. Hvert punkt i firedimensjonalt rom har fire koordinater: x, y, z og q.

La oss nå se hvordan den firedimensjonale kuben dukket opp.


Bildet viser en figur av endimensjonalt rom - en linje.


Hvis du gjør en parallell oversettelse av denne linjen langs OY-aksen, og deretter kobler de tilsvarende endene av de to resulterende linjene, får du en firkant.


På samme måte, hvis vi gjør en parallell oversettelse av kvadratet langs OZ-aksen og kobler de tilsvarende toppunktene, får vi en kube.


Og hvis vi gjør en parallell oversettelse av kuben langs OQ-aksen og kobler sammen hjørnene til disse to kubene, så får vi en firedimensjonal terning. Det heter forresten tesseract.

For å tegne en kube på et fly, trenger du den prosjekt. Visuelt ser det slik ut:

Tenk deg at det henger i luften over overflaten wireframe modell kube, det vil si som om "laget av ledning", og over den - en lyspære. Hvis du slår på lyspæren, spor skyggen av kuben med en blyant, og slå deretter av lyspæren, så vil en projeksjon av kuben vises på overflaten.

La oss gå videre til noe litt mer komplisert. Se igjen på tegningen med lyspæren: Som du kan se, konvergerte alle strålene på ett punkt. Det kalles forsvinningspunkt og brukes til å bygge perspektivprojeksjon(og noen ganger parallelle, når alle strålene er parallelle med hverandre. Resultatet er at det ikke er noen følelse av volum, men det er lettere, og hvis forsvinningspunktet er langt nok unna det projiserte objektet, så er forskjellen mellom disse to anslag er knapt merkbar). For å projisere et gitt punkt på et gitt plan ved hjelp av et forsvinningspunkt, må du tegne en linje gjennom forsvinningspunktet og det gitte punktet, og deretter finne skjæringspunktet for den resulterende linjen og planet. Og for å projisere en mer kompleks figur, for eksempel en kube, må du projisere hvert av hjørnene, og deretter koble sammen de tilsvarende punktene. Det er verdt å merke seg at rom-til-underrom-projeksjonsalgoritme kan generaliseres til 4D->3D, ikke bare 3D->2D.

Vi kan som sagt ikke forestille oss nøyaktig hvordan OQ-aksen ser ut, og det kan heller ikke tesseracten. Men vi kan få en begrenset ide om det hvis vi projiserer det på et volum og deretter tegner det på en dataskjerm!

La oss nå snakke om projeksjonen av tesserakten.


Til venstre er projeksjonen av kuben på flyet, og til høyre er tesserakten på volumet. De er ganske like: projeksjonen av en kube ser ut som to firkanter, små og store, den ene inne i den andre, med tilsvarende toppunkter forbundet med linjer. Og projeksjonen av tesserakten ser ut som to terninger, små og store, den ene inne i den andre, og hvis korresponderende hjørner er koblet sammen. Men vi har alle sett kuben, og vi kan med sikkerhet si at både den lille firkanten og den store, og de fire trapesene over, under, til høyre og venstre for den lille firkanten, faktisk er firkanter, dessuten er de er like. Det samme gjelder for Tesseract. Og en stor terning, og en liten terning, og seks avkortede pyramider på sidene av en liten terning - disse er alle terninger, og de er like.

Programmet mitt kan ikke bare tegne projeksjonen av tesserakten på volumet, men også rotere det. La oss se hvordan dette gjøres.

Først skal jeg fortelle deg hva det er rotasjon parallelt med planet.

Tenk deg at kuben roterer rundt OZ-aksen. Deretter beskriver hvert av hjørnene en sirkel rundt OZ-aksen.

En sirkel er en flat figur. Og planene til hver av disse sirklene er parallelle med hverandre, og i dette tilfellet er de parallelle med XOY-planet. Det vil si at vi ikke bare kan snakke om rotasjon rundt OZ-aksen, men også om rotasjon parallelt med XOY-planet. Som du ser, for punkter som roterer parallelt med XOY-aksen, endres kun abscissen og ordinaten, mens den applikat. forblir uendret Og faktisk kan vi snakke om rotasjon rundt en rett linje bare når vi har å gjøre med tredimensjonalt rom. I 2D dreier alt rundt et punkt, i 4D dreier alt rundt et plan, i 5D-rommet snakker vi om rotasjon rundt et volum. Og hvis vi kan forestille oss rotasjonen rundt et punkt, så er rotasjonen rundt planet og volumet noe utenkelig. Og hvis vi snakker om rotasjon parallelt med planet, kan et punkt i ethvert n-dimensjonalt rom rotere parallelt med planet.

Mange av dere har sikkert hørt om rotasjonsmatrisen. Multipliserer et punkt med det, får vi et punkt rotert parallelt med planet med en vinkel phi. For et todimensjonalt rom ser det slik ut:

Hvordan multiplisere: x av et punkt rotert med en vinkel phi = cosinus til vinkelen phi*x til det opprinnelige punktet minus sinusen til vinkelen phi*y til det opprinnelige punktet;
y til punktet rotert med vinkelen phi=sinus til vinkelen phi*x til det opprinnelige punktet pluss cosinus til vinkelen phi*y til det opprinnelige punktet.
Xa`=cosФ*Xa - sinФ*Ya
Ya`=sinФ*Xa + cosФ*Ya
, hvor Xa og Ya er abscissen og ordinaten til punktet som skal roteres, Xa` og Ya` er abscissen og ordinaten til det allerede roterte punktet

For et tredimensjonalt rom er denne matrisen generalisert som følger:

Rotasjon parallelt med XOY-planet. Som du kan se endres ikke Z-koordinaten, men kun X og Y endres.
Xa`=cosФ*Xa - sinФ*Ya + Za*0
Ya`=sinФ*Xa + cosФ*Ya + Za*0
Za`=Xa*0 + Ya*0 + Za*1 (i hovedsak Za`=Za)


Rotasjon parallelt med XOZ-planet. Ikke noe nytt,
Xa`=cosФ*Xa + Ya*0 - sinФ*Za
Ya`=Xa*0 + Ya*1 + Za*0 (faktisk Ya`=Ya)
Za`=sinФ*Xa + Ya*0 + cosФ*Za


Og den tredje matrisen.
Xa`=Xa*1 + Ya*0 + Za*0 (i hovedsak Xa`=Xa)
Ya`=Xa*0 + cosФ*Ya - sinФ*Za
Za`=Xa*0 + sinФ*Ya + cosФ*Za

Og for den fjerde dimensjonen ser de slik ut:


Jeg tror du allerede har forstått hva du skal multiplisere med, så jeg vil ikke male det igjen. Men jeg legger merke til at den gjør det samme som matrisen for å rotere parallelt med planet i tredimensjonalt rom! Både den og denne endrer bare ordinaten og applikatet, og resten av koordinatene blir ikke berørt, derfor kan den brukes i det tredimensjonale tilfellet, bare ignorere den fjerde koordinaten.

Men med projeksjonsformelen er ikke alt så enkelt. Uansett hvor mye jeg leser forumene, passet ingen av projeksjonsmetodene meg. Parallell passet ikke meg, siden projeksjonen ikke vil se tredimensjonal ut. I noen projeksjonsformler, for å finne et punkt, må du løse et system av ligninger (og jeg vet ikke hvordan jeg skal lære en datamaskin å løse dem), jeg forsto rett og slett ikke andre ... Generelt bestemte jeg meg for å komme opp med min egen måte. Betrakt for dette projeksjonen 2D->1D.


pov betyr "Point of view" (synspunkt), ptp betyr "Point to project" (punktet som skal projiseres), og ptp` er det ønskede punktet på OX-aksen.

Vinkler povptpB og ptpptp`A er like som korresponderende (stiplet linje er parallell med akse OX, linje povptp er sekant).
x-en til ptp` er lik x-en til ptp minus lengden på segmentet ptp`A. Dette segmentet kan finnes fra trekanten ptpptp`A: ptp`A = ptpA/tangens av vinkel ptpptp`A. Vi kan finne denne tangenten fra trekanten povptpB: tangens av vinkelen ptpptp`A = (Ypov-Yptp)(Xpov-Xptp).
Svar: Xptp`=Xptp-Yptp/tangens av vinkel ptpptp`A.

Jeg beskrev ikke denne algoritmen i detalj her, siden det er mange spesielle tilfeller der formelen endres noe. Hvem bryr seg - se i kildekoden til programmet, alt er skrevet i kommentarfeltet.

For å projisere et punkt i tredimensjonalt rom på et plan, vurderer vi ganske enkelt to plan - XOZ og YOZ, og løser dette problemet for hver av dem. Når det gjelder et firedimensjonalt rom, er det nødvendig å vurdere allerede tre plan: XOQ, YOQ og ZOQ.

Og til slutt, om programmet. Det fungerer slik: initialiser seksten hjørner av tesseracten -> avhengig av kommandoene som er lagt inn av brukeren, roter den -> projiser på volumet -> avhengig av kommandoene som er lagt inn av brukeren, roter projeksjonen -> projiser på et plan -> tegne.

Anslag og rotasjoner skrev jeg selv. De fungerer i henhold til formlene som jeg nettopp beskrev. OpenGL-biblioteket tegner linjer og blander også farger. Og koordinatene til toppunktene til tesserakten beregnes på denne måten:

Linje toppunkt koordinater sentrert ved origo og lengde 2 - (1) og (-1);
- "-" - en firkant - "-" - og en kant med lengde 2:
(1; 1), (-1; 1), (1; -1) og (-1; -1);
- " - " - kube - " - " -:
(1; 1; 1), (-1; 1; 1), (1; -1; 1), (-1; -1; 1), (1; 1; -1), (-1; 1; -1), (1; -1; -1), (-1; -1; -1);
Som du kan se, er firkanten en linje over OY-aksen og en linje under OY-aksen; en kube er en firkant foran XOY-planet, og en bak den; en tesseract er en kube på den andre siden av XOYZ-volumet, og en på denne siden. Men det er mye lettere å oppfatte denne vekslingen av enheter og minusenheter hvis de er skrevet i en kolonne

1; 1; 1
-1; 1; 1
1; -1; 1
-1; -1; 1
1; 1; -1
-1; 1; -1
1; -1; -1
-1; -1; -1

I den første kolonnen veksler én og minus én. I den andre kolonnen er det først to plusser, deretter to minuser. I den tredje - fire pluss en, og deretter fire minus en. Dette var toppen av kuben. Tesserakten har dobbelt så mange av dem, og derfor var det nødvendig å skrive en syklus for å deklarere dem, ellers er det veldig lett å bli forvirret.

Programmet mitt vet også hvordan man tegner anaglyf. Glade eiere av 3D-briller kan se et stereoskopisk bilde. Det er ikke noe vanskelig å tegne et bilde, det tegner bare to projeksjoner på et plan, for høyre og venstre øyne. Men programmet blir mye mer visuelt og interessant, og viktigst av alt - gir et bedre inntrykk av den firdimensjonale verden.

Mindre viktige funksjoner - å fremheve et av ansiktene i rødt, slik at du bedre kan se svingene, samt mindre bekvemmeligheter - justering av koordinatene til "øye"-punktene, øker og reduserer rotasjonshastigheten.

Arkiver med program, kildekode og bruksanvisning.

Utviklingen av den menneskelige hjernen fant sted i tredimensjonalt rom. Derfor er det vanskelig for oss å forestille oss rom med dimensjoner større enn tre. Faktisk kan den menneskelige hjernen ikke forestille seg geometriske objekter med mer enn tre dimensjoner. Og samtidig kan vi lett forestille oss geometriske objekter med dimensjoner ikke bare tre, men også med dimensjoner to og en.

Forskjellen og analogien mellom endimensjonale og todimensjonale rom, og forskjellen og analogien mellom todimensjonale og tredimensjonale rom tillater oss å åpne litt mystikkskjermen som skjermer oss fra rom med høyere dimensjoner. For å forstå hvordan denne analogien brukes, bør du vurdere et veldig enkelt firedimensjonalt objekt - en hyperkube, det vil si en firedimensjonal kube. La oss, for nøyaktighetens skyld, si at vi ønsker å løse et spesifikt problem, nemlig å telle antall kvadratiske flater av en firdimensjonal kube. All vurdering nedenfor vil være veldig løs, uten noen bevis, rent analogt.

For å forstå hvordan en hyperkube er bygget opp fra en vanlig kube, må man først se på hvordan en vanlig kube er bygget opp fra en vanlig firkant. For originaliteten til presentasjonen av dette materialet vil vi her kalle en vanlig firkantet SubCube (og vi vil ikke forveksle den med en succubus).

For å konstruere en kube fra en subkube, er det nødvendig å utvide subkuben i en retning vinkelrett på subkubens plan i retning av den tredje dimensjonen. Samtidig vil en underkube vokse fra hver side av den opprinnelige underkuben, som er en todimensjonal sideflate av kuben, som vil begrense det tredimensjonale volumet til kuben fra fire sider, to vinkelrett på hver retning i underkubens plan. Og langs den nye tredje aksen er det også to underkuber som begrenser det tredimensjonale volumet til kuben. Dette er det todimensjonale ansiktet der subkuben vår opprinnelig var plassert og den todimensjonale flaten til kuben der subkuben kom på slutten av kuben.

Det du nettopp har lest er beskrevet i overkant detaljert og med mange avklaringer. Og ikke tilfeldig. Nå skal vi gjøre et slikt triks, vi vil erstatte noen ord i den forrige teksten formelt på denne måten:
kube -> hyperkube
underkube -> kube
fly -> volum
tredje -> fjerde
2D -> 3D
fire -> seks
tredimensjonal -> firedimensjonal
to -> tre
fly -> plass

Som et resultat får vi følgende meningsfulle tekst, som ikke lenger virker for detaljert.

For å bygge en hyperkube fra en kube, må du strekke kuben i en retning vinkelrett på volumet av kuben i retning av den fjerde dimensjonen. Samtidig vil en kube vokse fra hver side av den opprinnelige kuben, som er den laterale tredimensjonale flaten til hyperkuben, som vil begrense det firedimensjonale volumet til hyperkuben fra seks sider, tre vinkelrett på hver retning i plassen til kuben. Og langs den nye fjerde aksen er det også to kuber som begrenser det firedimensjonale volumet til hyperkuben. Dette er det tredimensjonale ansiktet der kuben vår opprinnelig var plassert og det tredimensjonale ansiktet til hyperkuben, hvor kuben kom på slutten av konstruksjonen av hyperkuben.

Hvorfor er vi så sikre på at vi har fått riktig beskrivelse av konstruksjonen av hyperkuben? Ja, for ved nøyaktig samme formelle erstatning av ord får vi en beskrivelse av konstruksjonen av en kube fra en beskrivelse av konstruksjonen av en firkant. (Sjekk det ut selv.)

Nå er det klart at hvis en annen tredimensjonal kube skulle vokse fra hver side av kuben, så må det vokse et ansikt fra hver kant av den første kuben. Totalt har kuben 12 kanter, noe som betyr at det vil være ytterligere 12 nye flater (subkuber) for de 6 kubene som begrenser det firdimensjonale volumet langs de tre aksene i tredimensjonalt rom. Og det er to kuber til som begrenser dette firdimensjonale volumet nedenfra og ovenfra langs den fjerde aksen. Hver av disse kubene har 6 flater.

Totalt får vi at hyperkuben har 12+6+6=24 kvadratiske flater.

Følgende bilde viser den logiske strukturen til en hyperkube. Det er som en projeksjon av en hyperkube på tredimensjonalt rom. I dette tilfellet oppnås en tredimensjonal ramme av ribber. På figuren ser du selvfølgelig projeksjonen av denne rammen også på et plan.



På denne rammen er den indre kuben så å si den første kuben som konstruksjonen startet fra og som begrenser det firedimensjonale volumet til hyperkuben langs den fjerde aksen fra bunnen. Vi strekker denne innledende kuben opp langs den fjerde dimensjonsaksen og den går inn i den ytre kuben. Så de ytre og indre kubene fra denne figuren begrenser hyperkuben langs den fjerde dimensjonsaksen.

Og mellom disse to kubene er 6 nye kuber synlige, som er i kontakt med de to første av felles ansikter. Disse seks kubene begrenser hyperkuben vår langs tre akser med tredimensjonalt rom. Som du kan se, er de ikke bare i kontakt med de to første kubene, som er interne og eksterne på denne tredimensjonale rammen, men de er fortsatt i kontakt med hverandre.

Du kan regne direkte i figuren og forsikre deg om at hyperkuben virkelig har 24 ansikter. Men her kommer spørsmålet. Denne 3D-hyperkuberammen er fylt med åtte 3D-kuber uten hull. For å lage en ekte hyperkube fra denne 3D-projeksjonen av en hyperkube, er det nødvendig å snu denne rammen inn og ut slik at alle 8 kubene begrenser 4D-volumet.

Det gjøres slik. Vi inviterer en beboer i det firedimensjonale rommet på besøk og ber ham hjelpe oss. Den griper den indre kuben i dette rammeverket og flytter den mot den fjerde dimensjonen, som er vinkelrett på 3D-rommet vårt. Vi i vårt tredimensjonale rom oppfatter det som om hele den indre rammen var forsvunnet og bare rammen til den ytre kuben var igjen.

Deretter tilbyr 4D-assistenten vår å hjelpe til på fødeinstitusjoner for en smertefri fødsel, men våre gravide kvinner er livredde for utsiktene til at babyen rett og slett forsvinner fra magen og havner i et parallelt 3D-rom. Derfor blir den firfoldige høflig nektet.

Og vi lurer på om noen av kubene våre løsnet seg da hyperkuberammen ble snudd på vrangen. Tross alt, hvis noen tredimensjonale terninger som omgir hyperkuben berører naboene på rammen, vil de også berøre de samme ansiktene hvis den firedimensjonale snur rammen inn og ut.

La oss igjen gå til analogien med rom med lavere dimensjon. Sammenlign bildet av hyperkube-trådrammen med projeksjonen av 3D-kuben på planet vist i det følgende bildet.



Innbyggere i todimensjonale rom bygget på et plan et rammeverk av en kubeprojeksjon på et fly og inviterte oss, tredimensjonale innbyggere, til å snu dette rammeverket ut og inn. Vi tar de fire toppunktene til det indre kvadratet og flytter dem vinkelrett på planet. Samtidig ser todimensjonale beboere at hele den indre rammen forsvinner fullstendig, og de har kun rammen til den ytre firkanten. Med en slik operasjon fortsetter alle rutene som var i kontakt med kantene å berøre som før med de samme kantene.

Derfor håper vi at det logiske skjemaet til hyperkuben heller ikke vil bli krenket når hyperkuberammen snus på vrangen, og antallet kvadratiske flater til hyperkuben vil ikke øke og forbli lik 24. Dette er selvfølgelig ingen bevis i det hele tatt, men bare en gjetning ved analogi.

Etter alt som er lest her, kan du enkelt tegne det logiske rammeverket til en femdimensjonal kube og beregne hvor mange hjørner, kanter, flater, kuber og hyperkuber den har. Det er ikke vanskelig i det hele tatt.

Så snart jeg kunne forelese etter operasjonen, var det første spørsmålet studentene stilte:

Når vil du tegne en 4-dimensjonal kube for oss? Ilyas Abdulkhaevich lovet oss!

Jeg husker at mine kjære venner noen ganger liker et minutt med matematisk utdanningsprogram. Derfor vil jeg skrive en del av forelesningen min for matematikere her. Og jeg skal prøve å ikke være flau. Noen ganger leser jeg foredraget strengere, selvfølgelig.

La oss først bli enige. 4-dimensjonalt, og enda mer 5-6-7- og generelt k-dimensjonalt rom er ikke gitt oss i sansefornemmelser.
"Vi er fattige fordi vi bare er tredimensjonale," sa søndagsskolelæreren min, som først fortalte meg hva en 4-dimensjonal kube var. Søndagsskolen var selvfølgelig ekstremt religiøs – matematisk. På den tiden studerte vi hyperkuber. En uke før dette, matematisk induksjon, en uke etter det sykler Hamiltonian i grafer - henholdsvis dette er 7. klasse.

Vi kan ikke røre, lukte, høre eller se en 4-dimensjonal kube. Hva kan vi gjøre med det? Vi kan forestille oss det! Fordi hjernen vår er mye mer kompleks enn øynene og hendene våre.

Så, for å forstå hva en 4-dimensjonal kube er, la oss først forstå hva som er tilgjengelig for oss. Hva er en 3-dimensjonal kube?

OK OK! Jeg ber deg ikke om en klar matematisk definisjon. Bare forestill deg den enkleste og vanligste tredimensjonale kuben. Representert?

God.
For å forstå hvordan man generaliserer en 3-dimensjonal kube til et 4-dimensjonalt rom, la oss finne ut hva en 2-dimensjonal kube er. Det er så enkelt - det er en firkant!

Et kvadrat har 2 koordinater. Kuben har tre. Punktene til et kvadrat er punkter med to koordinater. Den første er fra 0 til 1. Og den andre er fra 0 til 1. Punktene til kuben har tre koordinater. Og hver er et hvilket som helst tall mellom 0 og 1.

Det er logisk å forestille seg at en 4-dimensjonal kube er en slik ting som har 4 koordinater og alt fra 0 til 1.

/* Det er også logisk å forestille seg en 1-dimensjonal kube, som ikke er noe mer enn et enkelt segment fra 0 til 1. */

Så vent, hvordan tegner du en 4-dimensjonal kube? Tross alt kan vi ikke tegne et 4-dimensjonalt rom på et plan!
Men tross alt tegner vi heller ikke 3-dimensjonalt rom på et plan, vi tegner det projeksjon på 2D-tegningsplanet. Vi plasserer den tredje koordinaten (z) i en vinkel, og forestiller oss at aksen fra tegneplanet går "mot oss".

Nå er det ganske klart hvordan man tegner en 4-dimensjonal kube. På samme måte som vi plasserte den tredje aksen i en vinkel, la oss ta den fjerde aksen og også plassere den i en vinkel.
Og - voila! - projeksjon av en 4-dimensjonal kube på et plan.

Hva? Hva er det for noe? Jeg hører alltid hvisking fra de bakre pultene. La meg forklare mer detaljert hva denne mylderet av linjer er.
Se først på den tredimensjonale kuben. Hva har vi gjort? Vi tok en firkant og dro den langs den tredje aksen (z). Det er som mange papirruter limt sammen i en haug.
Det er det samme med en 4-dimensjonal kube. La oss kalle den fjerde aksen for enkelhets skyld og science fiction-formål "tidsaksen". Vi må ta en vanlig tredimensjonal kube og dra den gjennom tiden fra tiden "nå" til tiden "om en time".

Vi har en "nå"-kube. Den er rosa på bildet.

Og nå drar vi den langs den fjerde aksen - langs tidsaksen (jeg viste den i grønt). Og vi får fremtidens kube – blå.

Hvert toppunkt av "kuben nå" etterlater et spor i tid - et segment. Forbinder hennes nåtid med fremtiden hennes.

Kort sagt, uten tekst: vi tegnet to identiske 3-dimensjonale kuber og koblet sammen de tilsvarende toppunktene.
Akkurat som vi gjorde med en 3D-kube (tegn 2 like 2D-kuber og koble sammen hjørnene).

For å tegne en 5D-kube, vil du tegne to kopier av 4D-kuben (en 4D-kube med 5. koordinat 0 og en 4D-kube med 5. koordinat 1) og koble de tilsvarende hjørnene med kanter. Riktignok vil en slik mengde kanter komme ut på flyet at det vil være nesten umulig å forstå noe.

Når vi har sett for oss en 4-dimensjonal kube og til og med vært i stand til å tegne den, kan vi utforske den på hvilken som helst måte. Ikke glem å utforske det både i sinnet og i bildet.
For eksempel. En 2-dimensjonal kube er begrenset på 4 sider av 1-dimensjonale kuber. Dette er logisk: for hver av de 2 koordinatene har den både en begynnelse og en slutt.
En 3-dimensjonal kube er avgrenset på 6 sider av 2-dimensjonale kuber. For hver av de tre koordinatene har den en begynnelse og en slutt.
Så en 4-dimensjonal kube må begrenses til åtte 3-dimensjonale kuber. For hver av de 4 koordinatene - fra to sider. I figuren over ser vi tydelig 2 ansikter som begrenser det langs "tids"-koordinaten.

Her er to kuber (de er litt skrå fordi de har 2 dimensjoner projisert på planet i en vinkel), som begrenser hyperkuben vår til venstre og høyre.

Det er lett å legge merke til "øvre" og "nedre" også.

Det vanskeligste er å visuelt forstå hvor "foran" og "bak" er. Den forreste starter fra forsiden av "kuben nå" og til forsiden av "fremtidens kube" - den er rød. Bak, henholdsvis lilla.

De er vanskeligst å få øye på, fordi andre kuber blir forvirret under føttene, noe som begrenser hyperkuben til en annen projisert koordinat. Men merk at kubene fortsatt er forskjellige! Her er bildet igjen, hvor "kuben nå" og "fremtidens kube" er fremhevet.

Selvfølgelig er det mulig å projisere en 4-dimensjonal kube inn i et 3-dimensjonalt rom.
Den første mulige romlige modellen er tydelig hvordan den ser ut: du må ta 2 terningerammer og koble deres tilsvarende hjørner med en ny kant.
Jeg har ikke denne modellen akkurat nå. I en forelesning viser jeg elevene en litt annerledes 3-dimensjonal modell av en 4-dimensjonal kube.

Du vet hvordan en kube projiseres på et fly som dette.
Som om vi ser på kuben ovenfra.

Nærenden er selvfølgelig stor. Og den andre siden ser mindre ut, vi ser den gjennom den nærmeste.

Slik kan du projisere en 4-dimensjonal kube. Kuben er større nå, fremtidens kube ser vi i det fjerne, så den ser mindre ut.

På den andre siden. Fra siden av toppen.

Direkte nøyaktig fra siden av kanten:

Fra ribbesiden:

Og den siste vinkelen, asymmetrisk. Fra avsnittet "sier du fortsatt at jeg så mellom ribbeina hans."

Vel, da kan du tenke på hva som helst. For eksempel, akkurat som en 3-dimensjonal kube utfolder seg på et plan (det er som å klippe et ark for å få en kube når den er brettet), så brettes en 4-dimensjonal kube seg ut i rommet. Det er som å kutte et stykke tre slik at vi ved å brette det i 4-dimensjonalt rom får en tesserakt.

Du kan studere ikke bare en 4-dimensjonal kube, men n-dimensjonale kuber generelt. For eksempel, er det sant at radiusen til en kule som er omskrevet rundt en n-dimensjonal terning er mindre enn lengden på en kant av denne kuben? Eller her er et enklere spørsmål: hvor mange hjørner har en n-dimensjonal kube? Og hvor mange kanter (1-dimensjonale flater)?

La oss starte med å forklare hva et firedimensjonalt rom er.

Dette er et endimensjonalt rom, det vil si ganske enkelt OX-aksen. Ethvert punkt på den er preget av én koordinat.


La oss nå tegne OY-aksen vinkelrett på OX-aksen. Så vi fikk et todimensjonalt rom, det vil si XOY-planet. Ethvert punkt på den er preget av to koordinater - abscissen og ordinaten.


La oss tegne OZ-aksen vinkelrett på aksene OX og OY. Du vil få et tredimensjonalt rom der ethvert punkt har en abscisse, en ordinat og en applikat.


Det er logisk at den fjerde aksen, OQ, skal være vinkelrett på aksene OX, OY og OZ samtidig. Men vi kan ikke konstruere en slik akse nøyaktig, og derfor gjenstår det bare å prøve å forestille seg den. Hvert punkt i firedimensjonalt rom har fire koordinater: x, y, z og q.

La oss nå se hvordan den firedimensjonale kuben dukket opp.


Bildet viser en figur av endimensjonalt rom - en linje.


Hvis du gjør en parallell oversettelse av denne linjen langs OY-aksen, og deretter kobler de tilsvarende endene av de to resulterende linjene, får du en firkant.


På samme måte, hvis vi gjør en parallell oversettelse av kvadratet langs OZ-aksen og kobler de tilsvarende toppunktene, får vi en kube.


Og hvis vi gjør en parallell oversettelse av kuben langs OQ-aksen og kobler sammen hjørnene til disse to kubene, så får vi en firedimensjonal terning. Det heter forresten tesseract.

For å tegne en kube på et fly, trenger du den prosjekt. Visuelt ser det slik ut:

Tenk deg at det henger i luften over overflaten wireframe modell kube, det vil si som om "laget av ledning", og over den - en lyspære. Hvis du slår på lyspæren, spor skyggen av kuben med en blyant, og slå deretter av lyspæren, så vil en projeksjon av kuben vises på overflaten.

La oss gå videre til noe litt mer komplisert. Se igjen på tegningen med lyspæren: Som du kan se, konvergerte alle strålene på ett punkt. Det kalles forsvinningspunkt og brukes til å bygge perspektivprojeksjon(og noen ganger parallelle, når alle strålene er parallelle med hverandre. Resultatet er at det ikke er noen følelse av volum, men det er lettere, og hvis forsvinningspunktet er langt nok unna det projiserte objektet, så er forskjellen mellom disse to anslag er knapt merkbar). For å projisere et gitt punkt på et gitt plan ved hjelp av et forsvinningspunkt, må du tegne en linje gjennom forsvinningspunktet og det gitte punktet, og deretter finne skjæringspunktet for den resulterende linjen og planet. Og for å projisere en mer kompleks figur, for eksempel en kube, må du projisere hvert av hjørnene, og deretter koble sammen de tilsvarende punktene. Det er verdt å merke seg at rom-til-underrom-projeksjonsalgoritme kan generaliseres til 4D->3D, ikke bare 3D->2D.

Vi kan som sagt ikke forestille oss nøyaktig hvordan OQ-aksen ser ut, og det kan heller ikke tesseracten. Men vi kan få en begrenset ide om det hvis vi projiserer det på et volum og deretter tegner det på en dataskjerm!

La oss nå snakke om projeksjonen av tesserakten.


Til venstre er projeksjonen av kuben på flyet, og til høyre er tesserakten på volumet. De er ganske like: projeksjonen av en kube ser ut som to firkanter, små og store, den ene inne i den andre, med tilsvarende toppunkter forbundet med linjer. Og projeksjonen av tesserakten ser ut som to terninger, små og store, den ene inne i den andre, og hvis korresponderende hjørner er koblet sammen. Men vi har alle sett kuben, og vi kan med sikkerhet si at både den lille firkanten og den store, og de fire trapesene over, under, til høyre og venstre for den lille firkanten, faktisk er firkanter, dessuten er de er like. Det samme gjelder for Tesseract. Og en stor terning, og en liten terning, og seks avkortede pyramider på sidene av en liten terning - disse er alle terninger, og de er like.

Programmet mitt kan ikke bare tegne projeksjonen av tesserakten på volumet, men også rotere det. La oss se hvordan dette gjøres.

Først skal jeg fortelle deg hva det er rotasjon parallelt med planet.

Tenk deg at kuben roterer rundt OZ-aksen. Deretter beskriver hvert av hjørnene en sirkel rundt OZ-aksen.

En sirkel er en flat figur. Og planene til hver av disse sirklene er parallelle med hverandre, og i dette tilfellet er de parallelle med XOY-planet. Det vil si at vi ikke bare kan snakke om rotasjon rundt OZ-aksen, men også om rotasjon parallelt med XOY-planet. Som du ser, for punkter som roterer parallelt med XOY-aksen, endres kun abscissen og ordinaten, mens den applikat. forblir uendret Og faktisk kan vi snakke om rotasjon rundt en rett linje bare når vi har å gjøre med tredimensjonalt rom. I 2D dreier alt rundt et punkt, i 4D dreier alt rundt et plan, i 5D-rommet snakker vi om rotasjon rundt et volum. Og hvis vi kan forestille oss rotasjonen rundt et punkt, så er rotasjonen rundt planet og volumet noe utenkelig. Og hvis vi snakker om rotasjon parallelt med planet, kan et punkt i ethvert n-dimensjonalt rom rotere parallelt med planet.

Mange av dere har sikkert hørt om rotasjonsmatrisen. Multipliserer et punkt med det, får vi et punkt rotert parallelt med planet med en vinkel phi. For et todimensjonalt rom ser det slik ut:

Hvordan multiplisere: x av et punkt rotert med en vinkel phi = cosinus til vinkelen phi*x til det opprinnelige punktet minus sinusen til vinkelen phi*y til det opprinnelige punktet;
y til punktet rotert med vinkelen phi=sinus til vinkelen phi*x til det opprinnelige punktet pluss cosinus til vinkelen phi*y til det opprinnelige punktet.
Xa`=cosФ*Xa - sinФ*Ya
Ya`=sinФ*Xa + cosФ*Ya
, hvor Xa og Ya er abscissen og ordinaten til punktet som skal roteres, Xa` og Ya` er abscissen og ordinaten til det allerede roterte punktet

For et tredimensjonalt rom er denne matrisen generalisert som følger:

Rotasjon parallelt med XOY-planet. Som du kan se endres ikke Z-koordinaten, men kun X og Y endres.
Xa`=cosФ*Xa - sinФ*Ya + Za*0
Ya`=sinФ*Xa + cosФ*Ya + Za*0
Za`=Xa*0 + Ya*0 + Za*1 (i hovedsak Za`=Za)


Rotasjon parallelt med XOZ-planet. Ikke noe nytt,
Xa`=cosФ*Xa + Ya*0 - sinФ*Za
Ya`=Xa*0 + Ya*1 + Za*0 (faktisk Ya`=Ya)
Za`=sinФ*Xa + Ya*0 + cosФ*Za


Og den tredje matrisen.
Xa`=Xa*1 + Ya*0 + Za*0 (i hovedsak Xa`=Xa)
Ya`=Xa*0 + cosФ*Ya - sinФ*Za
Za`=Xa*0 + sinФ*Ya + cosФ*Za

Og for den fjerde dimensjonen ser de slik ut:


Jeg tror du allerede har forstått hva du skal multiplisere med, så jeg vil ikke male det igjen. Men jeg legger merke til at den gjør det samme som matrisen for å rotere parallelt med planet i tredimensjonalt rom! Både den og denne endrer bare ordinaten og applikatet, og resten av koordinatene blir ikke berørt, derfor kan den brukes i det tredimensjonale tilfellet, bare ignorere den fjerde koordinaten.

Men med projeksjonsformelen er ikke alt så enkelt. Uansett hvor mye jeg leser forumene, passet ingen av projeksjonsmetodene meg. Parallell passet ikke meg, siden projeksjonen ikke vil se tredimensjonal ut. I noen projeksjonsformler, for å finne et punkt, må du løse et system av ligninger (og jeg vet ikke hvordan jeg skal lære en datamaskin å løse dem), jeg forsto rett og slett ikke andre ... Generelt bestemte jeg meg for å komme opp med min egen måte. Betrakt for dette projeksjonen 2D->1D.


pov betyr "Point of view" (synspunkt), ptp betyr "Point to project" (punktet som skal projiseres), og ptp` er det ønskede punktet på OX-aksen.

Vinkler povptpB og ptpptp`A er like som korresponderende (stiplet linje er parallell med akse OX, linje povptp er sekant).
x-en til ptp` er lik x-en til ptp minus lengden på segmentet ptp`A. Dette segmentet kan finnes fra trekanten ptpptp`A: ptp`A = ptpA/tangens av vinkel ptpptp`A. Vi kan finne denne tangenten fra trekanten povptpB: tangens av vinkelen ptpptp`A = (Ypov-Yptp)(Xpov-Xptp).
Svar: Xptp`=Xptp-Yptp/tangens av vinkel ptpptp`A.

Jeg beskrev ikke denne algoritmen i detalj her, siden det er mange spesielle tilfeller der formelen endres noe. Hvem bryr seg - se i kildekoden til programmet, alt er skrevet i kommentarfeltet.

For å projisere et punkt i tredimensjonalt rom på et plan, vurderer vi ganske enkelt to plan - XOZ og YOZ, og løser dette problemet for hver av dem. Når det gjelder et firedimensjonalt rom, er det nødvendig å vurdere allerede tre plan: XOQ, YOQ og ZOQ.

Og til slutt, om programmet. Det fungerer slik: initialiser seksten hjørner av tesseracten -> avhengig av kommandoene som er lagt inn av brukeren, roter den -> projiser på volumet -> avhengig av kommandoene som er lagt inn av brukeren, roter projeksjonen -> projiser på et plan -> tegne.

Anslag og rotasjoner skrev jeg selv. De fungerer i henhold til formlene som jeg nettopp beskrev. OpenGL-biblioteket tegner linjer og blander også farger. Og koordinatene til toppunktene til tesserakten beregnes på denne måten:

Linje toppunkt koordinater sentrert ved origo og lengde 2 - (1) og (-1);
- "-" - en firkant - "-" - og en kant med lengde 2:
(1; 1), (-1; 1), (1; -1) og (-1; -1);
- " - " - kube - " - " -:
(1; 1; 1), (-1; 1; 1), (1; -1; 1), (-1; -1; 1), (1; 1; -1), (-1; 1; -1), (1; -1; -1), (-1; -1; -1);
Som du kan se, er firkanten en linje over OY-aksen og en linje under OY-aksen; en kube er en firkant foran XOY-planet, og en bak den; en tesseract er en kube på den andre siden av XOYZ-volumet, og en på denne siden. Men det er mye lettere å oppfatte denne vekslingen av enheter og minusenheter hvis de er skrevet i en kolonne

1; 1; 1
-1; 1; 1
1; -1; 1
-1; -1; 1
1; 1; -1
-1; 1; -1
1; -1; -1
-1; -1; -1

I den første kolonnen veksler én og minus én. I den andre kolonnen er det først to plusser, deretter to minuser. I den tredje - fire pluss en, og deretter fire minus en. Dette var toppen av kuben. Tesserakten har dobbelt så mange av dem, og derfor var det nødvendig å skrive en syklus for å deklarere dem, ellers er det veldig lett å bli forvirret.

Programmet mitt vet også hvordan man tegner anaglyf. Glade eiere av 3D-briller kan se et stereoskopisk bilde. Det er ikke noe vanskelig å tegne et bilde, det tegner bare to projeksjoner på et plan, for høyre og venstre øyne. Men programmet blir mye mer visuelt og interessant, og viktigst av alt - gir et bedre inntrykk av den firdimensjonale verden.

Mindre viktige funksjoner - å fremheve et av ansiktene i rødt, slik at du bedre kan se svingene, samt mindre bekvemmeligheter - justering av koordinatene til "øye"-punktene, øker og reduserer rotasjonshastigheten.

Arkiver med program, kildekode og bruksanvisning.