23. juli 2001 - 18:09Der er
8 kommentarer og 1 løsning
Algoritme (tricky...)
Jeg søger en algoritme som givet en radius for en kugle i et 3 dimesionelt rum samt en afstand, beregner punkter fordelt over hele kuglens overflade med den pågældende afstand mellem punkterne.
(Problemet svarer til at bestemme positionerne af hjørner mellem felter på en fodbold.)
Håber der findes et matematisk geni som kan hjælpe...
Her tror jeg sgu at jeg kan hjælpe. Jeg lavede for 1 års tid siden noget java der kunne noget i den retning. Desværre har jeg ikke koden ved hånden, men jeg kan give dig et godt forslag.
Det du i virkeligheden er ude på, er at tegne et landkort som dem der hænger på skolerne, og derefter projicere det på en kugle.
Landkort er jo en 2 dimensionel repræsentation (jeg er ikke matematiker, så undskyld hvis jeg vrøvler) af grader på en kugle (jordkloden), hvilket vi også kalder længde- og bredde-grader.
Hvis vi nu vedtager at du vil have N*M punkter på din kugle, så skal du definere n*m punkter a\' {længdegrad, breddegrad } disse kan du f.eks. definere i radianer, og så skal de altså ligge indenfor værdiområde [0 - 2*PI] (hvis jeg ikke husker meget forkert).
Du definerer altså ikke afstanden mellem punkterne i absolut tal, men i grader.
Når du har alle de her punkter liggende i gradtal, skal du have projiceret dem op på kuglen, og der bruger du følgende formel: (som jeg lige fandt på nettet til formålet - jeg håber den er korrekt :-) )
x = distance * cos( latitude ) . sin( longitude ) y = distance * sin( latitude ) z = distance * cos( latitude ) . cos( longitude )
distance må radius på kuglen, latitude er breddegraden og longitude er længdegraden.
Eksempel:
radius = 2000 punkt i lgrad/bgrad : (0,2*pi) projiceret: x = 2000 * cos(0) . sin(2*pi) osv...
Jeg bruger i øjeblikket noget der svarer til den metode du beskriver. Problemet er at der bliver en høj tæthed af punkter i toppen og bunden af kuglen, som på en glubus. Det jeg er ude efter er mere i stil med en fodbold, sat sammen af 5- og 6-kanter.
Hvis vi siger at punkterne skal have samme afstand til \"nabopunkter\" har vi en simpel progression
1 punkt. den trivielle. 2 punkter. overfor hinanden 3 punkter. placeret 120 grader fra hinanden på en storcirkel. 4 punkter. placeret i en 3 kantet pyramide
og så er det slut. Der findes ikke flere konfigurationer af punkter på en kugle hvor alle punkter er lige langt fra hinanden.
Det du vist er ude efter er \"regulære\" former der fordeler punkterne jævnt på kugleoverfladen. dem er der lidt flere af men ikke vældig mange.
Den fodbold du bruger som eksempel opfylder fx. heller ikke det krav.
Men vi kan sige lidt om dem.
1) De er alle lavet ved at gentage figurerne 2, 3 eller 4 ovenfor et antalgang med regelmæssige vinkler imellem. en 8-kantet terning kan fx laves ved at placere nr 2 3 gange vinkelret på hinanden.
2) De kan allesammen \'bygges\' af ligesidede 3, 4 eller 5 kanter: 3 punkter = een ligesidet trekant trekant 4 punkter = fire ligesidede trekanter trekantet pyramide 6 punkter = otte ligesidede trekanter 8-kantet terning 32 punkter = tres ligesidede trekanter nærmest rund 8 punkter = seks kvadrater almindelig terning 20 punkter = tolv femkanter dodekaheder
Jeg ved godt at regnestykket ikke altid går op, så derfor behøver afstandende heller ikke at være 100% nøjagtige, bare så den grafiske repræsentation af kuglen kommer til at se uniform ud.
Undskyld hvis jeg har været lidt for uklar i mit spørgsmål.
Det gør ikke noget. Det væsentlige er at de 6 former er alle de helt regulære der er. De kan så \'udvides lidt ved at man skiller fx femkanterne lidt fra hinanden og sætter firkanter ind der forbinder de kanter der før stødte sammen, og derefter nogler trekanter imellem firkanternes frie sider. det bliver en \'gennemsnitsform af \'20 3-kanter\' og \'12 5-kanter\' formene der er ganske stor. Rigeligt detailleret nok til fodbolden. hvor blot en smule elasticitet i stoffet er nok til at gøre den perfekt rund.
hvor detailleret en opdeling af kugleoverflader har du brug for?
Her er så en generel metode: Den er dog mere empirisk end algoritmisk, men med kun 3 forsøg er den ikke helt dårlig:
Den er baseret på at en trekant kan opdeles i 4, 9, 16, ... mindre trekanter, ved at opdele siderne i 2, 3, 4, ... stykker og forbinde med linier paralelle med trekantens sider.
cut&paste eksemplet nedenfor ud i notepad ned skrifttype courier. eksperten.dk er ikke blivd ved bogstavgrafik :( a / \\ / \\ / \\ / \\ / \\ b-----------c del linierne i 2 med nye punkter d,e,f a / \\ / \\ d e / \\ / \\ b-----f-----c tegn linier mellem de nye punkter a / \\ / \\ d-----e / \\ / \\ / \\ / \\ b-----f-----c og skub tilsidst punkterne ud så de ligger på kuglens overflade. De trekanter der kommer ud af det bliver ikke helt ens. men tæt på.
og ved at vælge at starte med en af nedenstående figurer og så opdele siderne i i 2,3,4,... stykker kan du få en \'afstand\' der er rimeligt tæt på det ønskede. 4 punkter = fire ligesidede trekanter trekantet pyramide 6 punkter = otte ligesidede trekanter 8-kantet terning 12 punkter = tyve ligesidede trekanter nærmest rund
mvh JakobA
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.