In LOGO moet ik een procedure schrijven waarmee je veelhoekwaaiers kunt maken. Ik heb deze al wel bijna gevonden, maar 3 dingen mis ik nog.
Tot nu toe heb ik het volgende programma:
proc eindopdracht veelvlak maat aantal hoek als aantal=0 anders maak aantal aantal-1
herhaal veelvlak vooruit maat rechtsom 360/veelvlak einde herhaal
rechtsom 6 vooruit (maat*tan(6)-maat*tan(6)*tan(6))/cos(6) !!!!! maak maat (maat-maat*tan(6))/cos(6) !!!!! eindopdracht veelvlak maat aantal einde als thuis einde proc eindopdracht 4 50 16
Als je bovenstaande laat tekenen zal je ook wel direct duidelijk worden wat er met een veelhoekwaaier wordt bedoeld. Het probleem is nu eigenlijk dat ik de veelhoekwaaier zo moet maken dat alle hoekpunten van de veelhoek op de vorige veelhoek ligt. Dus waarbij je alle variabelen kan aanpassen zodat de figuur ook dan nog klopt.
De vraag gaat dus om het volgende ... op welke manier moet ik de 2 regels met uitroeptekens erbij aanpassen zodat de figuren wel kloppen. Zoals je kunt zien ben ik al veel aan het rekenen geslagen en toen kwam ik op het antwoord uit dat er nu staat, maar dat schijnt nog niet precies te kloppen en als je nu een waaier met 5-hoeken wilt maken klopt deze ook nog niet.
Bij voorbaat dank!
PS: graag snel een reactie
Toelichting na e-mail: Onderwerp: Veelhoekwaaier {in UJLOGO}
als ik een willekeurige n-hoek heb, vb. n = 5 levert een regelmatige 5-hoek, wat is dat het verband tussen de zijden van deze n-hoek en de zijde van de volgende n-hoek als je deze dan in de vorige tekent alleen dan 6 graden rechtsom gedraaid, maar wel zodat de volgende n-hoek zijn hoekpunten op de vorige heeft liggen en dan verkleind. En wat is de factor van verkleining dan? Deze verbanden moeten beiden recursief zijn.
De variabelen zijn als volgt gedefinieerd: maat = oorspronkelijke lengte van de zijde van de eerste n-hoek n = waarde die aangeeft welke n-hoek het betreft
Ik zoek dus de volgende recursieve verbanden:
volgende maat = vorige maat ..................................... (recursieve formule) {vb vorige maat + 10} volgende zijde n-hoek = vorige zijde n-hoek .................... (recursieve formule)
Ik snap niet helemaal, (maar ik ben niet zo goed in LOGO), waarom je na het tekenen van de eerste veelhoek eerst over (hardcoded) 6 graden draait. Volgens mij ga je na het tekenen van de eerste veelhoek eerst over een afstand x vooruit in de richting van B en draait dan over "hoek" graden.
Het probleem lijkt me nu als volgt meetkundig op te lossen. Zij A,B,C drie opvolgende hoekpunten van de net getekende veelhoek met zijde z. Vanuit A gaan we over een afstand x vooruit naar punt X. Merk op dat XB=z-x. We draaien nu over een hoek alpha, we moeten nu over een afstand z2 (de nieuwe zijde) vooruit naar punt Y zo, dat BY=x. Van driehoek XBY is nu bekend: ÐX=alpha, ÐB=180-360/n Dus is ook ÐY bekend: 180-alpha-(180-360/n)=360/n-alpha Er zijn twee zijden bekend (XB=z-x en BY=x). Met behulp van de sinusregel a/sin(alpha)=b/sin(beta)=c/sin(gamma) is het mogelijk x, (z-x), en XY=z2 uit te drukken in z, alpha en n. De verhouding z2/z moet je bewaren als vermenigvuldigfactor om straks de volgende ronde te kunnen tekenen. Dan kun je dus je nieuwe veelhoek tekenen.
Als ik me in de gauwigheid niet heb verrekend geldt: noem factor=sin(alpha)+sin(360/n-alpha), dan x=z*sin(alpha)/factor z2=XY=z*sin(360/n)/factor,
maar dat moet je vooral zelf even narekenen.
PS: gezien mijn formulering van het probleem is recursie dus misschien niet eens nodig!
PS: Op mijn website staat een oplossing van dit probleem voor een vierkant in JSP-generator: daarbij kies ik niet de hoek maar de zijde x als "basisgegeven": zie spiral