Mensen, ik ben wanhopig aan het worden. Vorig jaar heb ik een programmaatje geschreven in c++ met opengl dat een koch curve tekent. 
Ik ben de source ervan op een of andere manier kwijtgeraakt (was destijds een programmeeropdracht voor mijn studie). Nu probeer ik het programma opnieuw te schrijven maar ik kom er gewoon niet uit. De oplossing is simpel, maar ik zie door de bomen het bos niet meer. enfin, het probleem.
Ik wil een functie drawKoch(Point p, Point q, order)
Hierin is p het beginpunt en q het eindpunt (punten hebben een x en een y), order is een integer die aangeeft wel orde getekent moet worden. De functie is recursief. Als order 0 is dan wordt er gewoon een lijn tussen de twee punten getekend. Bij een hogere waarde moeten drie extra punten worden berekend (voor de vorm _/\_). Hier zit het probleem, bij het vinden van het punt boven in de driehoek.
de functie ziet er tot nu toe zo uit:
Een van de dingen die ik probeerde (en geweldig faalde) was om het punt op het midden van de lijn te bereken (punt h) en de afstand van dat punt tot aan punt m. En dan
Ik hoop dat een van jullie handig is met geometrie. Ik weet zeker dat de oplossing simpel is want vorige keer heb ik de complete functie in no-time gemaakt. Maar nu ben ik twee dagen bezig en ik zie het gewoon niet...
Voor de duidelijkheid, ik vraag niet of iemand even het programma voor me afmaakt, maar ik denk dat de berekening simpel moet zijn en hoop dat iemand met op weg kan helpen met deze berekening.
Alvast bedankt voor alle input!

Ik ben de source ervan op een of andere manier kwijtgeraakt (was destijds een programmeeropdracht voor mijn studie). Nu probeer ik het programma opnieuw te schrijven maar ik kom er gewoon niet uit. De oplossing is simpel, maar ik zie door de bomen het bos niet meer. enfin, het probleem.
Ik wil een functie drawKoch(Point p, Point q, order)
Hierin is p het beginpunt en q het eindpunt (punten hebben een x en een y), order is een integer die aangeeft wel orde getekent moet worden. De functie is recursief. Als order 0 is dan wordt er gewoon een lijn tussen de twee punten getekend. Bij een hogere waarde moeten drie extra punten worden berekend (voor de vorm _/\_). Hier zit het probleem, bij het vinden van het punt boven in de driehoek.
de functie ziet er tot nu toe zo uit:
C++: koch.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
| void drawKoch(Point p, Point q, int order) { if(order>0) { float dx = q.x - p.x; float dy = q.y - p.y; float length = sqrt(pow(dx,2) + pow(dy,2)); float segmentLength = length/3f; Point l; //het linkerpunt van de driehoek Point r; //het rechterpunt van de driehoek Point m; //het middelpunt van de driehoek, hoe te vinden? l.x = p.x + dx/3f; l.y = p.y + dy/3f; r.x = p.x + 2*dx/3f; r.y = p.y + 2*dy/3f; //en nu dus m.x en m.y bereken. Dit moet onafhankelijk van de hoek //van de lijn pq. Het lukt me gewoon niet meer... drawKoch(p, l, n-1); drawKoch(l, m, n-1); drawKoch(m, r, n-1); drawKoch(r, q, n-1); } else { glBegin(GL_LINES); glVertex2f(p.x, p.y); glVertex2f(q.x, q.y); glEnd(); } } |
Een van de dingen die ik probeerde (en geweldig faalde) was om het punt op het midden van de lijn te bereken (punt h) en de afstand van dat punt tot aan punt m. En dan
C++:
1
2
| m.x = h.x - cos(PI/2 - atan(dy/dx)) * segmentLength; m.y = h.y + sin(PI/2 - atan(dy/dx)) * segmentLength; |
Ik hoop dat een van jullie handig is met geometrie. Ik weet zeker dat de oplossing simpel is want vorige keer heb ik de complete functie in no-time gemaakt. Maar nu ben ik twee dagen bezig en ik zie het gewoon niet...
Voor de duidelijkheid, ik vraag niet of iemand even het programma voor me afmaakt, maar ik denk dat de berekening simpel moet zijn en hoop dat iemand met op weg kan helpen met deze berekening.
Alvast bedankt voor alle input!
[ Voor 3% gewijzigd door sdy op 20-02-2009 17:34 . Reden: uitleg dat het niet een "maak dit eens voor me"-topic is ]
Time is an illusion. Lunchtime doubly so.