coördinaten spiraal berkekenen
-
- Nieuw lid
- Berichten: 21
- Lid geworden op: 30 apr 2011, 16:29
coördinaten spiraal berkekenen
Voor een project moet ik een spiraal programeren die tussen elk punt een even grootte afstand heeft.
Ik heb al verscheidene dingen gelezen maar veel voorbeelden die ik zie worden opgebouwd met het al weten van de eind radius. Of de uitleg gaat er van uit dat de kennis verder dan basis kennis is.
Ik hoop dat iemand mij het kan uitleggen.
Liefst in kleine stapjes (aangezien het ook zo geprogrammeerd word).
Het moet van buiten naar binnen gaan (decreasing radius), en counter clockwise.
b.v.
start radius is 150mm
afname elke rotatie is 30mm
center xy is x 0, y 0
start punt is x -150, y = 0
afstand tot volgend punt 10mm.
hoe bereken ik de coördinaten naar het volgende punt?
hulp zou zeer welkom zijn.
Ik heb al verscheidene dingen gelezen maar veel voorbeelden die ik zie worden opgebouwd met het al weten van de eind radius. Of de uitleg gaat er van uit dat de kennis verder dan basis kennis is.
Ik hoop dat iemand mij het kan uitleggen.
Liefst in kleine stapjes (aangezien het ook zo geprogrammeerd word).
Het moet van buiten naar binnen gaan (decreasing radius), en counter clockwise.
b.v.
start radius is 150mm
afname elke rotatie is 30mm
center xy is x 0, y 0
start punt is x -150, y = 0
afstand tot volgend punt 10mm.
hoe bereken ik de coördinaten naar het volgende punt?
hulp zou zeer welkom zijn.
Re: coördinaten spiraal berkekenen
Stel een vergelijking op voor de x en de y coordinaten van de spiraal.
Typ: Gebruik onderstaande elementen voor de vergelijking
Typ: Gebruik onderstaande elementen voor de vergelijking
-
- Nieuw lid
- Berichten: 21
- Lid geworden op: 30 apr 2011, 16:29
Re: coördinaten spiraal berkekenen
wat bedoel je?Stel een vergelijking op voor de x en de y coordinaten van de spiraal.
is t de afstand to het volgend punt?
Re: coördinaten spiraal berkekenen
Ik had je vraag niet goed gelezen.
Ik had over die
Om het goed te maken help ik je wat verder.
De (x,y) coordinaten van de spiraal kunnen worden voorgesteld door
met t een parameter.
Heb je zelf enig idee hoe je de afstand van een stuk van deze spiraal kan berekenen?
Ik had over die
gelezenafstand tot volgend punt 10mm
Om het goed te maken help ik je wat verder.
De (x,y) coordinaten van de spiraal kunnen worden voorgesteld door
met t een parameter.
Heb je zelf enig idee hoe je de afstand van een stuk van deze spiraal kan berekenen?
-
- Nieuw lid
- Berichten: 21
- Lid geworden op: 30 apr 2011, 16:29
Re: coördinaten spiraal berkekenen
nee.Heb je zelf enig idee hoe je de afstand van een stuk van deze spiraal kan berekenen?
Ik heb het bovenstaande geprobeerd met t voor de 10mm die ik wil.
Ik weet niks van dit soort wiskunde, ik ging er van uit dat het zo geïnterpreteerd moest worden:
x = (-150 - 30*10)*cos(PI*2*10);
y = (-150-30*10)*sin(PI*2*10);
maar dit geeft:
-450.0
-0.0012159585
Re: coördinaten spiraal berkekenen
Nee t correspondeert niet met de afstand.clankill3r schreef:nee.Heb je zelf enig idee hoe je de afstand van een stuk van deze spiraal kan berekenen?
Ik heb het bovenstaande geprobeerd met t voor de 10mm die ik wil.
Ik weet niks van dit soort wiskunde, ik ging er van uit dat het zo geïnterpreteerd moest worden:
x = (-150 - 30*10)*cos(PI*2*10);
y = (-150-30*10)*sin(PI*2*10);
maar dit geeft:
-450.0
-0.0012159585
Re: coördinaten spiraal berkekenen
Als we een infinitesimaal klein stukje van de curve nemen dan geldt voor de afstand ds
Aangezien x en y gekend zijn in funktie van parameter t kan je dx en dy berekenen door af te leiden naar t.
Kan je dat?
Aangezien x en y gekend zijn in funktie van parameter t kan je dx en dy berekenen door af te leiden naar t.
Kan je dat?
-
- Nieuw lid
- Berichten: 21
- Lid geworden op: 30 apr 2011, 16:29
Re: coördinaten spiraal berkekenen
is t tijd?
Zoja in seconden of millis?
Verder heb ik geen wiskunde op school maar wel programmeren. Mijn wiskunde is voornamelijk optellen en aftrekken. Zodra sin en cos er bij komt kijken ga ik al zweten, al word dat steeds minder gelukkig .
x = (-150-30t)cos(2pi t)
ik neem even 3 sec.
1. (-150-30t)
vermenigvuldigen komt eerst dus (30*3)
-150-90 = -240
2. -240*cos(2pi t)
2pi t = 18.8
cos(18. = 0.9987723
-240 * 0.9987723 = -239.705
dus het antwoord op x = (-150-30t)cos(2pi t) is -239.705,
dit gaat al helemaal mis volgens mij...
Zoja in seconden of millis?
Verder heb ik geen wiskunde op school maar wel programmeren. Mijn wiskunde is voornamelijk optellen en aftrekken. Zodra sin en cos er bij komt kijken ga ik al zweten, al word dat steeds minder gelukkig .
x = (-150-30t)cos(2pi t)
ik neem even 3 sec.
1. (-150-30t)
vermenigvuldigen komt eerst dus (30*3)
-150-90 = -240
2. -240*cos(2pi t)
2pi t = 18.8
cos(18. = 0.9987723
-240 * 0.9987723 = -239.705
dus het antwoord op x = (-150-30t)cos(2pi t) is -239.705,
dit gaat al helemaal mis volgens mij...
Re: coördinaten spiraal berkekenen
Nee, t is een dimensieloze parameter.clankill3r schreef:is t tijd?
Dan wordt het moeilijkclankill3r schreef: Verder heb ik geen wiskunde op school maar wel programmeren. Mijn wiskunde is voornamelijk optellen en aftrekken. Zodra sin en cos er bij komt kijken ga ik al zweten, al word dat steeds minder gelukkig .
-
- Nieuw lid
- Berichten: 21
- Lid geworden op: 30 apr 2011, 16:29
Re: coördinaten spiraal berkekenen
hoe word t dan bepaald?
Re: coördinaten spiraal berkekenen
Dit moeten we oplossen naar t en vervolgens deze functie van s substitueren in de vergelijking van de spiraal om de formule een formule te bekomen waar je voor een bepaalde lengte van de spiraal de overeenkomende coordinaat bekomt. Probleem is dat dit oplossen naar t numerieke methodes vereist. Niet eenvoudig dus.
Laatst gewijzigd door wnvl op 16 mar 2012, 01:07, 1 keer totaal gewijzigd.
Re: coördinaten spiraal berkekenen
Om je een beetje verder te behelpen, kan je in
http://www.wolframalpha.com/input/?i=In ... C+99%7D%5D
99 door de waarde van t vervangen en je bekomt de lengte van de curve voor die waarde van t.
http://www.wolframalpha.com/input/?i=In ... C+99%7D%5D
99 door de waarde van t vervangen en je bekomt de lengte van de curve voor die waarde van t.
-
- Nieuw lid
- Berichten: 21
- Lid geworden op: 30 apr 2011, 16:29
Re: coördinaten spiraal berkekenen
bedankt voor de hulp, voorlopig geef ik het op.
Veels te moeilijke wiskunde
Veels te moeilijke wiskunde
Re: coördinaten spiraal berkekenen
Laat je niet van de wijs brengen door alle wiskundige formules.
Je kan afgeleiden en integralen:
- ofwel zelf uitrekenen (zoals je hierboven met wnvl gedaan hebt)
- ofwel opzoeken (in boeken of in een rekenomgeving zoals WolframAlpha)
Wiskundigen verkiezen meestal de eerste optie, programmeurs de tweede.
De oplossingsstrategie voor jouw probleem loopt dan via de volgende stappen:
[1] bepaal een parametervoorstelling van de spiraal: x en y-waarde als functie van t
[2] bepaal een formule voor de lengte s van de spiraal: s als functie van t
[3] zoek de inverse functie hiervan: t als functie van s
[4] bepaal voor elke stap s via [3] de waarde van t en met t via [1] de waarden van x en y
[1] bepaal een parametervoorstelling van de spiraal: x en y-waarde als functie van t
De standaard parametervoorstelling van een cirkel met middelpunt de oorsprong en straal r is:
met hoek theta een reeel getal.
Als theta loopt van 0 tot 2pi loopt de cirkel tegen de wijzers van de klok in van
punt (r,0) via (0,r), (-r,0) en (0,-r) terug naar (r,0).
Theta mag elk reeel getal zijn: als theta = 4pi heb je de cirkel 2 keer doorlopen,
bij 6pi 3 keer etc.
Je kan theta ook vervangen door 2pi*t, met t een reeel getal.
Als t=0 is theta=0, als t=1 is theta=2pi etc
Hier geeft t dus het aantal keren aan dat de cirkel doorlopen is.
Nu wil jij niet beginnen in (r,0), maar in (-r,0).
De draairichting blijft tegen de klok in, dus de parametervoorstelling wordt:
Bovendien wil je geen cirkel, maar een spiraal, waarvan de straal begint met
150 eenheden en geleidelijk afneemt met 30 eenheden per volledige rotatie, ofwel,
ook uitgedrukt in t:
r = 150 - 30*t
Vul dit in in de formules voor x en y:
of iets algemener met:
b = beginwaarde van de straal = 150
a = afname van de straal per rotatie = 30
ofwel:
Dit is de parametervoorstelling van je spiraal.
Parameter t loopt in ons geval van 0 (r=150) t/m 5 (r=0).
Als je bijvoorbeeld in een programma
voor t = 0 tot 5 met stapgrootte 0.01
punt (x(t), y(t)) berekent en plot
zou je spiraal al zichtbaar moeten worden.
@wnvl: volgens mij spiraliseer jij naar buiten ipv naar binnen
[2] bepaal een formule voor de lengte s van de spiraal: s als functie van t
De booglengte van een kromme bij gegeven parametervoorstelling hebben jullie bepaald
via deze weg: http://nl.wikipedia.org/wiki/Booglengte
Zowel de twee afgeleiden (dx/dt en dy/dt) als de integraal kan je opzoeken
via bv WolframAlpha.
Je komt dan uit op:
Wij willen de booglengte s weten gemeten vanaf het beginpunt tot aan een bepaalde waarde t,
dus van t1=0 tot t2=t.
Dit levert met bovenstaande formule:
Tot zover waren jullie gekomen.
Het is niet moeilijk dit om te zetten naar code, bv in C:
initspiral(b,a) roep je 1 keer aan om je spiraal te definieren, daarna kan je voor
elke waarde van t met spirallength(t) de lengte van het spiraaldeel berekenen.
We hadden al gezien dat t loopt van 0 t/m 5, wat vind je zo voor de waarden van
spirallength(0.0)
en
spirallength(5.0)
?
[3] zoek de inverse functie: t als functie van s
Zie je een mogelijkheid om met behulp van de functie spirallength(t) een functie
spiral_s2t(s) te bouwen, die voor gegeven s (met bv nauwkeurigheid delta=0.0001)
de bijbehorende waarde van t efficient kan zoeken?
[4] bepaal voor elke stap s via [3] de waarde van t en met t via [1] de waarden van x en y
Het zal nu niet moeilijk zijn voor elke s met stapgrootte 10 de waarde van t te bepalen
en daarmee de waarde van x(t) en y(t) om die vervolgens op te slaan in een bestand of
de punten (x(t), y(t)) te plotten op een bitmap.
Je kan afgeleiden en integralen:
- ofwel zelf uitrekenen (zoals je hierboven met wnvl gedaan hebt)
- ofwel opzoeken (in boeken of in een rekenomgeving zoals WolframAlpha)
Wiskundigen verkiezen meestal de eerste optie, programmeurs de tweede.
De oplossingsstrategie voor jouw probleem loopt dan via de volgende stappen:
[1] bepaal een parametervoorstelling van de spiraal: x en y-waarde als functie van t
[2] bepaal een formule voor de lengte s van de spiraal: s als functie van t
[3] zoek de inverse functie hiervan: t als functie van s
[4] bepaal voor elke stap s via [3] de waarde van t en met t via [1] de waarden van x en y
[1] bepaal een parametervoorstelling van de spiraal: x en y-waarde als functie van t
De standaard parametervoorstelling van een cirkel met middelpunt de oorsprong en straal r is:
met hoek theta een reeel getal.
Als theta loopt van 0 tot 2pi loopt de cirkel tegen de wijzers van de klok in van
punt (r,0) via (0,r), (-r,0) en (0,-r) terug naar (r,0).
Theta mag elk reeel getal zijn: als theta = 4pi heb je de cirkel 2 keer doorlopen,
bij 6pi 3 keer etc.
Je kan theta ook vervangen door 2pi*t, met t een reeel getal.
Als t=0 is theta=0, als t=1 is theta=2pi etc
Hier geeft t dus het aantal keren aan dat de cirkel doorlopen is.
Nu wil jij niet beginnen in (r,0), maar in (-r,0).
De draairichting blijft tegen de klok in, dus de parametervoorstelling wordt:
Bovendien wil je geen cirkel, maar een spiraal, waarvan de straal begint met
150 eenheden en geleidelijk afneemt met 30 eenheden per volledige rotatie, ofwel,
ook uitgedrukt in t:
r = 150 - 30*t
Vul dit in in de formules voor x en y:
of iets algemener met:
b = beginwaarde van de straal = 150
a = afname van de straal per rotatie = 30
ofwel:
Dit is de parametervoorstelling van je spiraal.
Parameter t loopt in ons geval van 0 (r=150) t/m 5 (r=0).
Als je bijvoorbeeld in een programma
voor t = 0 tot 5 met stapgrootte 0.01
punt (x(t), y(t)) berekent en plot
zou je spiraal al zichtbaar moeten worden.
@wnvl: volgens mij spiraliseer jij naar buiten ipv naar binnen
[2] bepaal een formule voor de lengte s van de spiraal: s als functie van t
De booglengte van een kromme bij gegeven parametervoorstelling hebben jullie bepaald
via deze weg: http://nl.wikipedia.org/wiki/Booglengte
Zowel de twee afgeleiden (dx/dt en dy/dt) als de integraal kan je opzoeken
via bv WolframAlpha.
Je komt dan uit op:
Wij willen de booglengte s weten gemeten vanaf het beginpunt tot aan een bepaalde waarde t,
dus van t1=0 tot t2=t.
Dit levert met bovenstaande formule:
Tot zover waren jullie gekomen.
Het is niet moeilijk dit om te zetten naar code, bv in C:
Code: Selecteer alles
//globale variabelen:
double spiral_a, spiral_b, spiral_t0;
//bereken booglengte:
double spirallength(double t)
{
double length,r,pr,w;
r = spiral_a * t - spiral_b;
pr = 2*pi*r;
w = sqrt(pr*pr+spiral_a*spiral_a);
length = r*w/(2*spiral_a);
length += spiral_a*log(w+pr)/(4*pi);
length -= spiral_t0;
return(length);
}
//definieer b, a en t0:
void initspiral(double b, double a)
{
spiral_b=b;
spiral_a=a;
spiral_t0 = 0;
spiral_t0 = spirallength(0);
}
elke waarde van t met spirallength(t) de lengte van het spiraaldeel berekenen.
We hadden al gezien dat t loopt van 0 t/m 5, wat vind je zo voor de waarden van
spirallength(0.0)
en
spirallength(5.0)
?
[3] zoek de inverse functie: t als functie van s
Zie je een mogelijkheid om met behulp van de functie spirallength(t) een functie
spiral_s2t(s) te bouwen, die voor gegeven s (met bv nauwkeurigheid delta=0.0001)
de bijbehorende waarde van t efficient kan zoeken?
[4] bepaal voor elke stap s via [3] de waarde van t en met t via [1] de waarden van x en y
Het zal nu niet moeilijk zijn voor elke s met stapgrootte 10 de waarde van t te bepalen
en daarmee de waarde van x(t) en y(t) om die vervolgens op te slaan in een bestand of
de punten (x(t), y(t)) te plotten op een bitmap.