Puzzel Puzzels
clankill3r
Artikelen: 0
Berichten: 21
Lid geworden op: za 30 apr 2011, 15: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.

ads

Steun Sciencetalk Tomodachi Life - Nintendo Switch

Tomodachi Life - Nintendo Switch

Bekijk product

Steun Sciencetalk Sony PS5 DualSense draadloze controller – Chroma Indigo

Sony PS5 DualSense draadloze controller – Chroma Indigo

Bekijk product

Steun Sciencetalk Logitech M220 Silent - Draadloze Muis - Wit

Logitech M220 Silent - Draadloze Muis - Wit

Bekijk product

wnvl
Artikelen: 0
Berichten: 11
Lid geworden op: zo 26 aug 2012, 00:03

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

150-30t
-\cos (2\pi t)
\sin (2\pi t)
Scispace Scispace

Scispace is dé ai voor wetenschappers en onderzoekers. Ga naar SciSpace en profiteer van één van de beste ai's.

Scispace

clankill3r
Artikelen: 0
Berichten: 21
Lid geworden op: za 30 apr 2011, 15:29

Re: coördinaten spiraal berkekenen

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?
wnvl
Artikelen: 0
Berichten: 11
Lid geworden op: zo 26 aug 2012, 00:03

Re: coördinaten spiraal berkekenen

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

\left((-150-30t)\cos(2\pi t) , (-150-30t)sin(2\pi t)\right)

met t een parameter.

Heb je zelf enig idee hoe je de afstand van een stuk van deze spiraal kan berekenen?
clankill3r
Artikelen: 0
Berichten: 21
Lid geworden op: za 30 apr 2011, 15:29

Re: coördinaten spiraal berkekenen

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
wnvl
Artikelen: 0
Berichten: 11
Lid geworden op: zo 26 aug 2012, 00:03

Re: coördinaten spiraal berkekenen

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.
wnvl
Artikelen: 0
Berichten: 11
Lid geworden op: zo 26 aug 2012, 00:03

Re: coördinaten spiraal berkekenen

Als we een infinitesimaal klein stukje van de curve nemen dan geldt voor de afstand ds

ds^2=dx^2+dy^2

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?
wnvl
Artikelen: 0
Berichten: 11
Lid geworden op: zo 26 aug 2012, 00:03

Re: coördinaten spiraal berkekenen

x=(-150-30t)\cos(2\pi t)
dx=???



y=(-150-30t)sin(2\pi t)
dy=???



ds^2=???
clankill3r
Artikelen: 0
Berichten: 21
Lid geworden op: za 30 apr 2011, 15: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.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...
wnvl
Artikelen: 0
Berichten: 11
Lid geworden op: zo 26 aug 2012, 00:03

Re: coördinaten spiraal berkekenen

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
Artikelen: 0
Berichten: 21
Lid geworden op: za 30 apr 2011, 15:29

Re: coördinaten spiraal berkekenen

hoe word t dan bepaald?
wnvl
Artikelen: 0
Berichten: 11
Lid geworden op: zo 26 aug 2012, 00:03

Re: coördinaten spiraal berkekenen

x=(-150-30t)\cos(2\pi t)
dx=60 \pi (t+5) sin(2 \pi t)-30 cos(2 \pi t)dt



y=(-150-30t)sin(2\pi t)
dy=-30 sin(2 \pi t)+60 \pi (t+5) cos(2 \pi t))dt



ds^2=dx^2+dy^2=(30^2+(60\pi(t+5))^2 -7200 \pi (t+5) )dt^2
ds=\sqrt{dx^2+dy^2}=\sqrt{(30^2+(60\pi(t+5))^2 -7200 \pi (t+5) )}dt

\int_0^sds=\int_0^t\sqrt{(30^2+(60\pi(t+5))^2 -7200 \pi (t+5) )}dt
s=\frac{15 \left(2 (\pi (t+5)-1) \sqrt{4 \pi ^2 (t+5)^2-8 \pi (t+5)+1}-3 \log \left(-2 \pi (t+5)-\sqrt{4 \pi ^2 (t+5)^2-8 \pi (t+5)+1}+2\right)\right)}{2 \pi } - \frac{15 \left(2 (5 \pi -1) \sqrt{1-40 \pi +100 \pi ^2}-3 \left(\log \left(\sqrt{1-40 \pi +100 \pi ^2}+10 \pi -2\right)+i \pi \right)\right)}{2 \pi }

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 vr 16 mar 2012, 00:07, 1 keer totaal gewijzigd.
wnvl
Artikelen: 0
Berichten: 11
Lid geworden op: zo 26 aug 2012, 00:03

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.
clankill3r
Artikelen: 0
Berichten: 21
Lid geworden op: za 30 apr 2011, 15:29

Re: coördinaten spiraal berkekenen

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

ads

Steun Sciencetalk bol cadeaukaart - 5 euro - Bedankt!

bol cadeaukaart - 5 euro - Bedankt!

Bekijk product

Steun Sciencetalk Sakura Basic Set 3 Gelpennen Zuiver Wit Fijn/Medium/Dik

Sakura Basic Set 3 Gelpennen Zuiver Wit Fijn/Medium/Dik

Bekijk product

Steun Sciencetalk bol cadeaukaart - 15 euro - HiepHiep

bol cadeaukaart - 15 euro - HiepHiep

Bekijk product

siep
Moderator
Artikelen: 0
Berichten: 5
Lid geworden op: do 17 okt 2024, 12:39

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:
\(x(t) = r \cdot cos(\theta)\)

\(y(t) = r \cdot sin(\theta)\)

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.
\(x(t) = r \cdot cos(2\pi t)\)

\(y(t) = r \cdot sin(2\pi t)\)

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:
\(x(t) = -r \cdot cos(2\pi t)\)

\(y(t) = -r \cdot sin(2\pi t)\)


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:
\(x(t) = -(150 - 30\cdot t) \cdot cos(2\pi t)\)

\(y(t) = -(150 - 30\cdot t) \cdot sin(2\pi t)\)


of iets algemener met:
b = beginwaarde van de straal = 150
a = afname van de straal per rotatie = 30
\(x(t) = -(b - a\cdot t) \cdot cos(2\pi t)\)

\(y(t) = -(b - a\cdot t) \cdot sin(2\pi t)\)

ofwel:

\(x(t) = (a\cdot t - b) \cdot cos(2\pi t)\)

\(y(t) = (a\cdot t - b) \cdot sin(2\pi t)\)


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:

\(s = \int_{t1}^{t2} \sqrt{\left(\frac{dx}{dt}\right)^2 + \left(\frac{dy}{dt}\right)^2}dt =\)


\(\left[\frac{at-b}{2a}\sqrt{(2\pi (at-b))^2 + a^2} + \frac{a}{4\pi}\ln \left( \sqrt{(2\pi (at-b))^2 + a^2}+2\pi (at-b)\right) \right]_{t1}^{t2}\)


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:

\(s = \frac{at-b}{2a}\sqrt{(2\pi (at-b))^2 + a^2} + \frac{a}{4\pi}\ln \left( \sqrt{(2\pi (at-b))^2 + a^2}+2\pi (at-b)\right) -\)


\(\left( \frac{a\cdot 0-b}{2a}\sqrt{(2\pi (a\cdot 0-b))^2 + a^2} + \frac{a}{4\pi}\ln \left( \sqrt{(2\pi (a\cdot 0-b))^2 + a^2}+2\pi (a\cdot 0-b)\right) \right)\)


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.

Terug naar “Praktijkproblemen”

Sciencetalk: Leer, deel of groei. Volg of geef een cursus op Sciencetalk!