Avatar billede quiw Nybegynder
03. november 2011 - 20:25 Der er 4 kommentarer og
1 løsning

Isometrik og nummerering.

Goddag.

Jeg har lavet følgende isometriske koordinat system:
http://quiw.dk/isometric.png

Jeg ønsker dog at give alle felterne et unikt nummer (som vist med blåt på billedet). Derfor mangler jeg 2 metoder/funktioner:

1: At få det unikke nummer, ud fra et givet x,y koordinat.
2: Omvendt, at få et x,y koordinat, ud fra det unikke nummer.

Jeg er ikke den skarpeste til matematik, er der hjælp at hente?

På forhånd mange tak.
Avatar billede acore Ekspert
03. november 2011 - 23:13 #1
Formlerne er:

1)
n = 10*x - 9*y + 1

2)
y = n%10 - 1
if (y == 0) y = 10
x = (n + 9*y - 1)/10

% er modulus - altså resten ved division med 10

Mon ikke du selv kan skrive dem om til javascript.
Avatar billede quiw Nybegynder
04. november 2011 - 00:00 #2
Metode 1: giver et nydeligt resultat, virker som den skal!

Metode 2: Den giver det korrekte resultat ved de fleste af felterne. Men der er dog nogle felter hvor den er skævt på den (udvalgte eksempler):

Felt 77, det rigtige koordinat(4,-4) bliver til (13,6)
Felt 1, det rigtige koordinat(0,0) bliver til (9,10)
Felt 10, det rigtige koordinat(9,9) bliver til (0,-1)

Det kan naturligvis godt være, at jeg har foretaget en forkert implementation af koden. Jeg regner lige efter imorgen, med mindre du har ændringer.

:)
Avatar billede quiw Nybegynder
04. november 2011 - 11:55 #3
Jeg har implemeneret følgende:


var original_x = 4;
var original_y = -4;

var number = 10*original_x - 9*original_y + 1;

var new_x = 0;
var new_y =(number%10) - 1;

if(new_y==0){
    new_y=10;
}

new_x = (9*new_y+number-1)/10;

Og får, som ovenskrevet, det forkerte svar: 13,6
Avatar billede acore Ekspert
04. november 2011 - 14:43 #4
Nej, det kan jeg godt se. Jeg tænker lige og venter tilbage i aften.
Avatar billede acore Ekspert
04. november 2011 - 23:36 #5
Nu tror jeg, at jeg har et bedre forslag:

2 - revision 1)
y = n%10 - 1
x = (n + 9*y - 1)/10
if (x + y > 18)
{
  y = y - 10
  x = (n + 9*y - 1)/10
}
if (x + y < 0)
{
  y = y + 10
  x = (n + 9*y - 1)/10
}
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester