Matteproblem (behöver en formel)

Permalänk
Medlem

Jag var kanske lite otydlig, din uträkning fungerar utmärkt för att lösa RasmusB's problem om du tänker att y-axeln utgör basen i en triangel med sidorna R, x' och y'. I och med att du utgår från x-axeln blir vinkeln fel. Inverterar man cos och sin så löser det sig.

edit: reservation.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Slashdotcom
Är du säker på att det testdata som du fått är korrekt? Om man mäter vinkeln enligt dig så borde 198.2 grader vara nästa rakt ner. Rakt ner (180 grader) borde ju ge y = 2*R =79, men 20mm är inte ens ett R

Mitt fel! Skrev fel där, menade 99,1 grader - dvs hälften utav 198,2 - och då ska y bli 20.

Men när jag anger detta så får jag det till att y blir 43,1654mm - och det kan inte stämma eftersom 180 grader är 39,5mm och 360 grader är 39,5*2. :S Mycket möjligt att jag har missat något som du har skrivit.

Kör med:
v2 = asin(r/l*sin(v));
v3 = PI-v2-v;
x = sin(v3)*l/sin(v);
y = l+r-x;

Permalänk
Medlem

Orkar inte plugga...

float GetDistance(float V, float R, float L) { V = V / 180 * 3.14159265; // Omvandlar grader till radianer. float x = R * sin(V); float y = R * cos(V); float k = sqrt(L*L-(x*x)); return L+R-k-y; }

V är vinkeln, R radien osv..

Edit: formatering.

Permalänk
Medlem

Ledsen att behöva säga det men jag får samma resultat.

Permalänk
Citat:

Ursprungligen inskrivet av RasmusB
Mitt fel! Skrev fel där, menade 99,1 grader - dvs hälften utav 198,2 - och då ska y bli 20.

Men när jag anger detta så får jag det till att y blir 43,1654mm - och det kan inte stämma eftersom 180 grader är 39,5mm och 360 grader är 39,5*2. :S Mycket möjligt att jag har missat något som du har skrivit.

Kör med:
v2 = asin(r/l*sin(v));
v3 = PI-v2-v;
x = sin(v3)*l/sin(v);
y = l+r-x;

Får det fortfarande inte att stämma. 90 grader (mätt från rätt uppefrån) borde ju ge y = L+R-sqrt(L²-R²) ~= 48.86 och då borde också 99.1 vara mer än 48.86 eller? Sen ger väl 180 grader y = 2*r och 360 grader ger väl y = 0, annars måste jag missuppfattat dig. Du får rätta mig om så är fallet

Visa signatur

Jag ser så dåligt när jag blundar. Jag ser nästan...nästan ingenting alls.

Permalänk
Medlem

blev visst lite fel om 90 < V < 270..

detta borde funka:

float GetDistance(float V, float R, float L) { V = V / 180 * 3.14159265; float x = R * sin(V); float y = R * cos(V); float k = sqrt(L*L-(x*x)); if (y < 0) return L+R-k-y; else return L+R-k+y; }

Edit: skrivbordsprog ftw...

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Slashdotcom
Får det fortfarande inte att stämma. 90 grader (mätt från rätt uppefrån) borde ju ge y = L+R-sqrt(L²-R²) ~= 48.86 och då borde också 99.1 vara mer än 48.86 eller? Sen ger väl 180 grader y = 2*r och 360 grader ger väl y = 0, annars måste jag missuppfattat dig. Du får rätta mig om så är fallet

Mattematiskt sätt så har du inte missförstått mig, men praktiskt sätt har du det - men du kan ju inte veta hur jag tänkter :P. Det är en modell på en skiva som kommer att snurra dvs när skivan har snurrat 360 grader så har den gjort 39,5*2 :). Du förstår nog vad jag menar.

Citat:

Ursprungligen inskrivet av smekhet
blev visst lite fel om 90 < V < 270..

detta borde funka:

float GetDistance(float V, float R, float L) { V = V / 180 * 3.14159265; float x = R * sin(V); float y = R * cos(V); if (y < 0) float k = sqrt(L*L-(x*x)); else float k = sqrt(L*L-(x*x))+y; return L+R-k-y; }

Fortfarande samma formel? Förutom en if sats, och jag kommer att få samma resultat även om if satsen är där.

Permalänk
Medlem

nä, inte samma formel. skrev fel dock kolla igen.

+- y beroende på vinkeln.

Permalänk
Medlem

Har inte orkat läsa alla svar nu, men som jag förstått är L, R och v konstanta. Och avståndet från mitten till toppen är L+R.
Isåfall, om jag nu kallar v för v1, vinkeln längst ut till höger v3, den i toppen för v2 och den tredje sidan i triangeln kallar jag för X.

Första, fixa fram alla vinklar:
Sin(v2) = R*sin(v1) / L
v2 = Sin^-1(v2)

v3 = 180-v2-v1

Ta sedan fram sidan K:
K = L*sin(v3) / sin(v1)

Y = L+R-X

Sedan får du bara kasta in dessa i ditt program på något bra sätt
Sin(v2) = R*sin(v1) / L
v2 = Sin^-1(v2)
v3 = 180-v2-v1
K = L*sin(v3) / sin(v1)
Y = L+R-X

Sen får du även lägga in en if-sats som kollar om v = 180 grader, då gäller att Y = L+R-(L-R) = R+R.
Och skulle v1 vara större än 180 grader kör du v1 = 360-v1 så borde det fungera.

Permalänk
Medlem

smekhet: Funkar fortfarande inte :-/
ChRiiLLe: Vad menar du med "v2 = Sin^-1(v2)"? Om det ska vara upphöjt till -1? Samt vad är X då? Eftersom du inte har skrevit med detta.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av RasmusB
smekhet: Funkar fortfarande inte :-/
ChRiiLLe: Vad menar du med "v2 = Sin^-1(v2)"? Om det ska vara upphöjt till -1? Samt vad är X då? Eftersom du inte har skrevit med detta.

Antar att K = X.
Sin^-1 = inverssin, heter antagligen ASin() i C++.

Permalänk
Medlem

ChRiiLLe: Antar att du menar så här:

v2 = r*sin(v)/l;
v2 = asin(v2);
v3 = 180-v2-v;
k = l*sin(v3) / sin(v)

y = l+r-k

Detta fungerar tyvärr inte..

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Chimaira
heter antagligen ASin() i C++.

asin()*

Permalänk
Medlem

Var tog Raol vägen egentligen? Då hade det inte varit något snack om att ha fel åtmistone.

För min del tog matten slut vid Matte C, så jag hänger inte med alls på vad ni säger.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av RasmusB
ChRiiLLe: Antar att du menar så här:

v2 = r*sin(v)/l;
v2 = asin(v2);
v3 = 180-v2-v;
k = l*sin(v3) / sin(v)

y = l+r-k

Detta fungerar tyvärr inte..

Jo, var så jag menade.. Ser inte vad som skulle kunna vara fel i den heller..

Däremot tror jag ditt exempel är ganska fel
L=88mm
R=39,5mm
V=198,2
Y=20mm

Om Y+K = L+R = 127,5 och med vinkeln 198,2 grader (R pekar nästan rakt ner, lite åt vänster) och då måste Y bli mycket större än 20mm.

Permalänk
Medlem

Svaret är: badboll.

Edit: jag kan ha fel.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av RasmusB
Mattematiskt sätt så har du inte missförstått mig, men praktiskt sätt har du det - men du kan ju inte veta hur jag tänkter :P. Det är en modell på en skiva som kommer att snurra dvs när skivan har snurrat 360 grader så har den gjort 39,5*2 :). Du förstår nog vad jag menar.

Vänta lite här... Det Slashdotcom och andra korrekt har räknat ut åt dig är längden y i din figur. Den kommer att öka och minska periodiskt, ha sin största längd i V = 180 grader och vara exakt noll då V = 0 grader (vilket är samma sak som 360 grader).

Men det du egentligen vill veta är alltså veta hur långt punkten som sitter i ändan på "L-pinnen" har rört sig?

Visa signatur

Är det inte Fingal Olsson som sitter där borta?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Jerka^
Vänta lite här... Det Slashdotcom och andra korrekt har räknat ut åt dig är längden y i din figur. Den kommer att öka och minska periodiskt, ha sin största längd i V = 180 grader och vara exakt noll då V = 0 grader (vilket är samma sak som 360 grader).

Men det du egentligen vill veta är alltså veta hur långt punkten som sitter i ändan på "L-pinnen" har rört sig?

Ja, det är vad jag vill veta men det är precis samma sak som att ta reda på y.. Jag har själv rört till det något enormt nu har jag kommit på när jag tänkte efter, i mitt exempel som jag har gett er har jag sagt att r=39,5 l=88 och v=198,2
Men egentligen är r=39,5/2 (39,5 är det y kan vara som max, dvs vid 180 grader). och v=99,1 (198,2 grader/2). Ni får ursäkta mig för att ha rört till det så :S

Om det är någon som har tappat greppet om vad jag vill veta - har själv nästan gjort det nu - så är det alltså vad y är lika med då L har förflyttat sig tex 90 grader (detta bör då bli - om formeln är korrekt - hälften utav Y's maximala avstånd dvs 39,5/2 skall det bli..

Permalänk

Vid 90 grader borde y vara lite mer än det maximala avståndet genom två eftersom L-staget har rört sig lite i x-led då också.

Visa signatur

Jag ser så dåligt när jag blundar. Jag ser nästan...nästan ingenting alls.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Slashdotcom
Vid 90 grader borde y vara lite mer än det maximala avståndet genom två eftersom L-staget har rört sig lite i x-led då också.

Det kan stämma, efter att ha korrigerat diverse misstag från min sida får jag nu fram att Y skall vara lika med 21,9949 när L har flyttat sig 90 grader, kan detta stämma tro?

Permalänk
Citat:

Ursprungligen inskrivet av RasmusB
Det kan stämma, efter att ha korrigerat diverse misstag från min sida får jag nu fram att Y skall vara lika med 21,9949 när L har flyttat sig 90 grader, kan detta stämma tro?

Låter som det stämmer bra för att
y = L+R-sqrt(L²-R²) = 21.9949 då v = 90 grader.

Visa signatur

Jag ser så dåligt när jag blundar. Jag ser nästan...nästan ingenting alls.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av RasmusB
Ja, det är vad jag vill veta men det är precis samma sak som att ta reda på y...

Njae. Enligt Slashdotcoms formel kommer y att öka upp till 180 graders vinkel, och sen minska igen ner till noll när vinkeln når 360 grader.

Du skrev så här:

Citat:

Ursprungligen inskrivet av RasmusB
Det är en modell på en skiva som kommer att snurra dvs när skivan har snurrat 360 grader så har den gjort 39,5*2...

Enligt den nuvarande formeln skulle t ex y bli exakt samma sak när V = 270 grader som när V = 90 grader. Är du med på det?

Visa signatur

Är det inte Fingal Olsson som sitter där borta?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Jerka^
Enligt den nuvarande formeln skulle t ex y bli exakt samma sak när V = 270 grader som när V = 90 grader. Är du med på det?

Det är jag berädd på, eftersom jag inte kommer att syssla med så stora vinklar så är det inte något problem :). Vinklarna kommer väl att vara som störrst 170-175.