Avatar billede rune.osterdal.com Nybegynder
22. september 2004 - 21:26 Der er 5 kommentarer og
1 løsning

simulere en 3d kasse

Jeg sidder lige nu og skal programmere en tegning af et landskab med bl.a. nogle højhuse med vinduer.

Det er så meningen at der skal være dybde i billedet så ved tegning af højhuse skal de tegnes som en kasse set lidt fra siden.

simpel illustration: http://www.siterobot.com/rune/hus.bmp

Altså ses fronten af bygningen og top og højre side. Mit spørgsmål er så hvordan jeg får udregnet de tre koordinater på bagsiden af huset der skal tegnes.

Jeg har bl.a. følgende:

public void tegnHus(int etager, int vinduerIBredde, int vinduerIDybde, int x, int y, Graphics g){
    int hoejde = (etager*etageHøjde);
    int bredde = (vinduerIBredde*(vinduesBredde+vinduesMellemrum));
    int dybde = (vinduerIDybde*(vinduesBredde+vinduesMellemrum));

}

Det idéelle ville være at lave en funktion der kan udregne det udfra x,y på et hjørne på forsiden, dybde og et forsvindingspunkt ude i horisonten, men en fast vinkel på linien vil også være en mulighed..

Håber I er klar på denne lille udfordring. ;-)
Avatar billede rune.osterdal.com Nybegynder
22. september 2004 - 21:41 #1
det er forresten polygon klassen jeg bruger...
Avatar billede stigc Nybegynder
22. september 2004 - 21:51 #2
Hvis du skal lave "ægte" 3d, så er der langt endnu. Du kan downloade source til en 3d engine her http://stigc.dk/projects.asp. En beskrivelse af teknikken kan findes her http://www.geocities.com/SiliconValley/Horizon/6933/3d.html
Avatar billede rune.osterdal.com Nybegynder
22. september 2004 - 21:55 #3
tak for linksne ;-)
Men vil nu gerne have det løst det selv.. *host* med Jeres hjælp ;-)
Avatar billede rune.osterdal.com Nybegynder
24. september 2004 - 20:18 #4
Jeg har lavet et par funktioner til at hjælpe mig med at udregne koordinaterne vist på tegningen øverst i spørgsmålet.. men funktion to virker ikke ordentligt
--
    public double calcLengthOfCFromCoord(int x1, int y1, int x2, int y2){
//udregner længden på stregen der skal tegnes ud fra koordinatet der skal tegnes fra og dybden på kassen.
        int a1 = Math.max(x1,x2);
        int a2 = Math.min(x1,x2);
        int b1 = Math.max(y1,y2);
        int b2 = Math.min(y1,y2);
        double a = a1-a2;
        double b = b1-b2;
        double lengthOfC = Math.sqrt(Math.pow(a,2)+Math.pow(b,2));
        return lengthOfC;
    }
   
    public ArrayList calcCoordFromLengthOfC(double x, double y, double d){
//funktion får x,y stregen skal starte fra og længden på stregen der skal tegnes i retning af forsvindingspunktet
        double height = Math.max(y,disappearancey) - Math.min(y,disappearancey);
        double width = Math.max(x,disappearancex) - Math.min(x,disappearancex);
//    length from start coordinate to disappearancepoint -->
        double cLength = Math.sqrt(Math.pow(width,2)+Math.pow(height,2));
//    percent size of line compared to line from x,y to disappearancepoint -->
        double cRelation = d/cLength;
        int nyx, nyy;
        if (x>disappearancex){ //if x right of disappearancepoint
            nyx = (int)(x - width*cRelation);
        } else if (x<disappearancex) { //if x left of disappearancepoint
            nyx = (int)(x + width*cRelation);
        } else { //if x equal to x in disappearancepoint
            nyx = (int)x;
        }
        if (y>disappearancey){ //if y bellow disappearancepoint
            nyy = (int)(y - height*cRelation);
        } else if (y<disappearancey){ //if y over disappearancepoint
            nyy = (int)(y + height*cRelation);
        } else { //if y equal to y in disappearancepoint
            nyy = (int)y;
        }
        ArrayList xy = new ArrayList();
        xy.add(new Integer(nyx));
        xy.add(new Integer(nyy));
        return xy;
    }

den udregner ikke koordinatet rigtigt i forhold til mit forsvindingspunkt
er du frisk? ;-)
Avatar billede rune.osterdal.com Nybegynder
24. september 2004 - 20:35 #5
upss.. lidt rod i koden.. bare glem funktion et..
Avatar billede rune.osterdal.com Nybegynder
20. oktober 2004 - 10:29 #6
lukkes
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
Kurser inden for grundlæggende programmering

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