voor een kleine test in c++ ben ik physics aan het programmeren. ik weet hier nog niks van en ik dacht, laat ik eens een basis leggen. zo ziet dit er ongeveer uit:
De code doet wel wat. als ik een driekhoek maak vliegt die driehoek een willekeurige richting op als ik op space druk. hij gaat dus niet eens naar beneden. Weet iemand veel van physics of ziet iemand of ik ergens iets fout doe.
Alvast bedankt
Thomas
C++: main.cpp
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
| typedef struct { int x,y; //positie van het punt. } s_point; // een punt. typedef struct { int p1,p2; //de 2 punten van de connectie. deze int's bevatten de indexen van de array van punten. int len ; //de te behouden lengte van de connectie } s_constraint; // een connectie tussen 2 punten. s_point point[32]; // voor nu een max van 32 punten. s_constraint constraint[1024]; // maximale aantal combinaties mogelijk tussen deze punten. //---------// // dit stuk is er nog niet op gebouwd om punten te verwijderen. het is een test. int point_amt; // de index van de eerstvolgende te plaatsen punt. int constraint_amt; // de index van de eerstvolgende te plaatsen connectie. //-------// bool play; // runnen van de simulatie. int iterations; // hoe precies zijn de physics //functions : // lengthdir_x(len,dir) retour: de x component van de vector in richting "dir" met lengte "len" // lengthdir_y(len,dir) retour: de y component van de vector in richting "dir" met lengte "len" // Point_Direction(x1,y1,x2,y2) retour: de richting van punt 1 naar 2. // Point_Distance(x1,y1,x2,y2) retour: de afstand tussen punt 1 en 2. gebruikt bij het invullen // van constraint[constraint_amt].len point_amt = 0; constraint_amt = 0; play = false; iterations = 8; // hiertussen de do loop . hier maak ik de punten. dat spreekt voor zich en daar zit het probleem niet. // bij het maken van een punt zet hij de mouse x en mouse y in point[point_amt] en point_amt wordt // vervolgens met 1 opgehoogd. // bij het maken van een connectie vult hij constraint[constraint_amt].pt1 met de array index van de //dichtsbijzijnde point. bij loslaten van de muis vult hij constraint[constraint_amt].p2 met de // dichtsbijzijnde point. vervolgens hoogt hij constraint_amt met 1 op. if (keys.keytrig & CML_INPUT_KEY_SPACE) // graphics library handled de keys. { play = !play; } if (play == true) { for(int i=0;i<point_amt;i++) { point[i].y+=8; // een simpele gravity voor elke point. if (point[i].y > 480) point[i].y = 480; //de vloer } for(int _I=0;_I<iterations;_I++) // hoe hoger iterations. hoe vaker dit wordt uitgevoerd = preciezer. { for(int i=0;i<constraint_amt;i++) // loopt door alle connecties { int x1,y1,x2,y2,cx,cy; // cx = centerx , cy = centery x1 = point[constraint[i].p1].x; // zet alle punten van 1 connectie in variables. y1 = point[constraint[i].p1].y; // ^ x2 = point[constraint[i].p2].x; // ^ y2 = point[constraint[i].p2].y; // ^ cx = (x1+x2)/2; // bepaald het midden van de 2 punten van de connectie. cy = (y1+y2)/2; // ^ int dir1 = PointDirection(cx,cy,x1,y1); // bepaald de richting vanuit het midden naar punt 1. int dir2 = dir1+180; // we gaan ervan uit dat de richting naar punt 2 altijd omgekeerd is. //dit stuk verplaatst beide punten vanuit het midden naar de gewenste afstand. //hij berekent de vector van de halve afstand. en telt die bij de center op. point[constraint[i].p1].x = cx + lengthdir_x(constraint[i].len/2,dir1); point[constraint[i].p1].y = cy + lengthdir_y(constraint[i].len/2,dir1); point[constraint[i].p2].x = cx + lengthdir_x(constraint[i].len/2,dir2); point[constraint[i].p2].y = cy + lengthdir_y(constraint[i].len/2,dir2); } } } // teken de punten en lijnen van de connectie. //einde do loop. |
De code doet wel wat. als ik een driekhoek maak vliegt die driehoek een willekeurige richting op als ik op space druk. hij gaat dus niet eens naar beneden. Weet iemand veel van physics of ziet iemand of ik ergens iets fout doe.
Alvast bedankt
Thomas