Toon posts:

[JAVA] vreemd getal

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het maken van een simpele 3d-omgeving, ik ben net begonnen dus er moet nog wat in:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// 3D-engine
import java.applet.*;
import java.awt.*;

public class ThreeD extends Applet
{
    Camera C1 = new Camera(0,0,0);
    Matrix M1 = new Matrix(500,500,500);
    Matrix M2 = new Matrix(-500,500,500);
    Matrix M3 = new Matrix(500,-500,500);
    Matrix M4 = new Matrix(-500,-500,500);
    public void init()
    {
        setBackground(Color.white);
    }
    
    public void paint(Graphics g)
    {
        C1.projectOnScreen(g,M1);
        C1.projectOnScreen(g,M2);
        C1.projectOnScreen(g,M3);
        C1.projectOnScreen(g,M4);
        g.drawString("(" + M1.GetX() + "," + M1.GetY() + "," + M1.GetZ() + ")" , 40 , 40);
        g.drawString("(" + M2.GetX() + "," + M2.GetY() + "," + M2.GetZ() + ")" , 40 , 80);
        g.drawString("(" + M3.GetX() + "," + M3.GetY() + "," + M3.GetZ() + ")" , 40 , 120);
        g.drawString("(" + M4.GetX() + "," + M4.GetY() + "," + M4.GetZ() + ")" , 40 , 160);
    }   

    /** Deze klasse is een blauwdruk voor de objecten die de punten binnen de 3-dimensionale matrix vormen */
    class Matrix
    {
        private int xMatrix;
        private int yMatrix;
        private int zMatrix;

        public Matrix(int xMatrix,int yMatrix,int zMatrix)
        {
            this.xMatrix = xMatrix;
            this.yMatrix = yMatrix;
            this.zMatrix = zMatrix;
        }

        public int GetX()
        {
            return xMatrix;
        }
        public int GetY()
        {
            return yMatrix;
        }
        public int GetZ()
        {
            return zMatrix;
        }
    }

    /** Deze klasse is een blauwdruk voor de camerastandpunten binnen de 3-dimensionale matrix
        deze camera-standpunten zorgen voor output op het beeldscherm. */
    class Camera
    {
        private int internalXCamera;
        private int internalYCamera;

        private final int xCamera;
        private final int yCamera;
        private final int zCamera;

        private final int screenDistance = 500;
        private final int[] screenCenter = {320, 240};

        public Camera(int xCamera, int yCamera, int zCamera)
        {
            this.xCamera = xCamera;
            this.yCamera = yCamera;
            this.zCamera = zCamera;
        }

        public void projectOnScreen(Graphics g, Matrix m)
        {
            internalXCamera = (int)(screenDistance / (m.GetZ() * m.GetX()));
            internalYCamera = (int)(screenDistance / (m.GetZ() * m.GetY()));
            g.drawString(""+m.GetX(),40,180);
            g.drawString("(" + internalXCamera + "," + internalYCamera + ")" , 40 , 200);
            g.drawOval((int)(320+internalXCamera),(int)(240+internalYCamera),2,2);
        }
    }
}

bij de public void projectOnScreen zijn de internalXCamera en de internalYCamera vraamde getallen, het lijkt of er veel soorten getallen over elkaar heen gedrukt zijn, of het is 0 :?. Wat doe ik verkeerd?

[edit]
Sorry voor de ontbrekende informatie, ik heb alles extra geconverteerd naar integer, om een geheel getal over te houden. Bij gebrek aan inspiratie heb ik voor matrix gekozen, ik wist tijdelijk niks beters, en ik zal dat veranderen bij een beter alternatief.(Het is niet relevant voor de werking van de applet IMHO). Ik heb alle standaard dingen nagekeken, {} ; () enz. deze zijn correct. Maar om een of andere reden blijft de uitkomst van internalXCamera 0, net als van internalYCamera.

[ Voor 13% gewijzigd door Verwijderd op 12-09-2003 21:32 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Heropend op verzoek, Bukker gaat aan de hand van P&W FAQ - De "quickstart" een stuk meer relevante informatie toevoegen om duidelijk te maken wat ie al zoal heeft gedaan, welke problemen hij heeft uitgesloten etc :)

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

het lijkt of er veel soorten getallen over elkaar heen gedrukt zijn, of het is 0
Als je ze nou gewoon System.out.println'd, dan weet je het zeker. Debuggen heet dat, staat een heel stukje over in de FAQ

Verder doe je de projectie verkeerd. Over het algemeen is dat:
x' = f * x / z
y' = f * y / z

Waarbij f afhankelijk is van de fov (en dus de afstand viewer <-> screen) en de grootte van het scherm

Waarom heet het trouwens een Matrix terwijl je eigenlijk een Vector bedoelt?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

Verder vind ik je naamgeving een beetje vreemd.

Matrix wordt over het algemeen gebruikt voor meer dan 1 dimensie. Wat jij hier als een matrix gebruikt is eerder een vector. Verder zijn er neit iets teveel constanten door je code heen. Dingen als screensize en screencenter zou ik sowieso afhankelijk van elkaar maken en op een centrale plaatst definieren of gewoon afleiden van de grootte van het window.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ja tuurlijk krijg je meerdere getallen over elkaar heen. Je voert 4 * projectOnScreen uit en in die methode schrijf je telkens je internalXCamera en internalYCamera. Je doet dit echter altijd op de coordinaten 40 , 200 en dus worden en 4 getallen over elkaar geschreven.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
Je hebt gelijk rwb, maar dat verklaart de uitkomst nog niet, (0,0)?

:X, sorry je hebt gelijk .oisyn |:(

[ Voor 28% gewijzigd door Verwijderd op 17-09-2003 10:52 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

Als je mijn reply nou eens leest. Jij doet screenDistance / (m.getZ () * m.GetX ())

Je kan er donder op zeggen dat m.getZ () * m.GetX () groter is dan screenDistance, dus je krijgt sowieso een waarde tussen 0 en 1. En aangezien een int geen getallen met een drijvende komma aankan, wordt dat dus gewoon 0

Maar wat je bedoelt is: screenDistance * m.getX () / m.getZ ()

[ Voor 10% gewijzigd door .oisyn op 12-09-2003 21:47 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1