coördinaten spiraal berkekenen

Wiskunde is niet alleen een vak op school. Kom je ergens in de praktijk (bijvoorbeeld tijdens je werk) een wiskundig probleem tegen dan kun je hier om hulp vragen.
clankill3r
Nieuw lid
Nieuw lid
Berichten: 21
Lid geworden op: 30 apr 2011, 16:29

coördinaten spiraal berkekenen

Bericht door clankill3r » 15 mar 2012, 21:01

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.

Gebruikersavatar
wnvl
Vergevorderde
Vergevorderde
Berichten: 1490
Lid geworden op: 05 okt 2011, 16:30

Re: coördinaten spiraal berkekenen

Bericht door wnvl » 15 mar 2012, 21:15

Stel een vergelijking op voor de x en de y coordinaten van de spiraal.

Typ: Gebruik onderstaande elementen voor de vergelijking




clankill3r
Nieuw lid
Nieuw lid
Berichten: 21
Lid geworden op: 30 apr 2011, 16:29

Re: coördinaten spiraal berkekenen

Bericht door clankill3r » 15 mar 2012, 21:33

Stel een vergelijking op voor de x en de y coordinaten van de spiraal.
wat bedoel je?

is t de afstand to het volgend punt?

Gebruikersavatar
wnvl
Vergevorderde
Vergevorderde
Berichten: 1490
Lid geworden op: 05 okt 2011, 16:30

Re: coördinaten spiraal berkekenen

Bericht door wnvl » 15 mar 2012, 21:47

Ik had je vraag niet goed gelezen.
Ik had over die
afstand tot volgend punt 10mm
gelezen


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?

clankill3r
Nieuw lid
Nieuw lid
Berichten: 21
Lid geworden op: 30 apr 2011, 16:29

Re: coördinaten spiraal berkekenen

Bericht door clankill3r » 15 mar 2012, 21:56

Heb je zelf enig idee hoe je de afstand van een stuk van deze spiraal kan berekenen?
nee.

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

Gebruikersavatar
wnvl
Vergevorderde
Vergevorderde
Berichten: 1490
Lid geworden op: 05 okt 2011, 16:30

Re: coördinaten spiraal berkekenen

Bericht door wnvl » 15 mar 2012, 22:03

clankill3r schreef:
Heb je zelf enig idee hoe je de afstand van een stuk van deze spiraal kan berekenen?
nee.

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
Nee t correspondeert niet met de afstand.

Gebruikersavatar
wnvl
Vergevorderde
Vergevorderde
Berichten: 1490
Lid geworden op: 05 okt 2011, 16:30

Re: coördinaten spiraal berkekenen

Bericht door wnvl » 15 mar 2012, 22:07

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?

Gebruikersavatar
wnvl
Vergevorderde
Vergevorderde
Berichten: 1490
Lid geworden op: 05 okt 2011, 16:30

Re: coördinaten spiraal berkekenen

Bericht door wnvl » 15 mar 2012, 22:10












clankill3r
Nieuw lid
Nieuw lid
Berichten: 21
Lid geworden op: 30 apr 2011, 16:29

Re: coördinaten spiraal berkekenen

Bericht door clankill3r » 15 mar 2012, 23:39

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.8) = 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...

Gebruikersavatar
wnvl
Vergevorderde
Vergevorderde
Berichten: 1490
Lid geworden op: 05 okt 2011, 16:30

Re: coördinaten spiraal berkekenen

Bericht door wnvl » 16 mar 2012, 00:00

clankill3r schreef:is t tijd?
Nee, t is een dimensieloze parameter.

clankill3r 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 :).
Dan wordt het moeilijk

clankill3r
Nieuw lid
Nieuw lid
Berichten: 21
Lid geworden op: 30 apr 2011, 16:29

Re: coördinaten spiraal berkekenen

Bericht door clankill3r » 16 mar 2012, 00:05

hoe word t dan bepaald?

Gebruikersavatar
wnvl
Vergevorderde
Vergevorderde
Berichten: 1490
Lid geworden op: 05 okt 2011, 16:30

Re: coördinaten spiraal berkekenen

Bericht door wnvl » 16 mar 2012, 00:08

















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.

Gebruikersavatar
wnvl
Vergevorderde
Vergevorderde
Berichten: 1490
Lid geworden op: 05 okt 2011, 16:30

Re: coördinaten spiraal berkekenen

Bericht door wnvl » 16 mar 2012, 01:06

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.

clankill3r
Nieuw lid
Nieuw lid
Berichten: 21
Lid geworden op: 30 apr 2011, 16:29

Re: coördinaten spiraal berkekenen

Bericht door clankill3r » 27 mar 2012, 22:02

bedankt voor de hulp, voorlopig geef ik het op.
Veels te moeilijke wiskunde :(

arie
Moderator
Moderator
Berichten: 3917
Lid geworden op: 09 mei 2008, 09:19

Re: coördinaten spiraal berkekenen

Bericht door arie » 29 mar 2012, 12:25

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:

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);
}

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.

Plaats reactie