Matteproblem (behöver en formel)

Permalänk
Medlem

Matteproblem (behöver en formel)

Jag visste inte riktigt var jag kunde posta detta, och hittade inga matteforum - inte för att jag la någon direkt vikt i att leta.

Detta är till ett c++projekt jag håller på med så detta har alltså inte med skola att göra.

Det är väldigt jobbigt att förklara vad det är jag vill veta men genom att kolla på den bifogade bilden så bör det vara rätt så lätt att hänga med.

Jag är ute efter en formel som kan räkna ut variabeln Y genom att jag vet måtten på variablerna L, V samt R. V är en vinkel, och R samt L är fasta mått. Det kan efterliknas ett vevparti till ett motorfordon tex. Sen skulle jag vilja ha en omvänd formel på detta där jag vet L, R och Y men inte V. Hoppas att ni förstod vad jag menade.

Bilden:

Gjorde två modeller på hur det KAN se ut, men eftersom alla mått varierar så kan jag inte ange dessa, men kan ge er ett par mått som stämmer (nästan exakt) så att ni kan räkna lite.

L=88mm
R=39,5mm
V=198,2
Y=20mm

Permalänk
Medlem

sin(V) / L = sin(vinkeln längst upp) / R = sin(vinkeln längst till höger) / (lodräta sidan till vänster)

Resten får du kasta om själv.

Allmänt gäller att sin(vinkel) / (sidan mittemot vinkeln) är samma för alla vinklar+sidor.

Permalänk
Medlem

Jag vet inte om det bara är jag som är korkad, men jag kan verkligen inte förstå hur detta kan hjälpa mig att få fram Y. Visst hade jag kunnat få fram värdet utav sidan som är mittemot L (den streckade) så hade jag kunnat ta (L+R)-Y1 (om man döper värdet till Y1) och på såvis få fram Y.

Permalänk

är avståndet mellan hjulets mitt och "taket" konstant? Och är den L+R lång eller något annat?

Permalänk
Medlem

Japp, det är alltid L+R. (min ritning stämmer inte när det kommer till proportioner, utan den är bara ritad för att visa vad dom är vad)

Permalänk
Medlem

Sinussatsen (http://sv.wikipedia.org/wiki/Sinussatsen) säger att förhållandet mellan sinus (en vinkel) och dess motsatta sida skall vara samma för alla vinklar och motsatta sidor i en triangel.

Du har ju Sin V och dess motsatta sida L, problemet är att du inte har vinkeln mellan L och R som skulle krävas för att räkna ut den delen du vill ha bort från den streckade (L+R).
Vad du däremot har är ju R vilket gör att du kan räkna ut vinkeln mellan L och den streckade, vi kan kalla den W.

Sin V / L = Sin W / R (lös ut W)

Eftersom Vinkelsumman ska vara 180 grader kan du då räkna ut vinkeln mellan L och R. vi kan kalla den Z (180 - V - W). Då den är uträknad kan du med återigen med hjälp av sinussatsen räkna ut den streckade delen av triangeln

Sin V / L = Sin Z / X (där X är den streckade delen som skall lösas ut)

För att sedan räkna ut Y tar du bara hela steckade (L+R) minus X.

Borde gå att lösa så iaf Var ett tag sedan jag höll på med detta

Visa signatur

Core 2 Quad Q6600 | Gigabyte GA-P35-DS3 | Corsair XMS2-6400 2x2048MB | Corsair HX 520W | BFG 8800GT

Permalänk
Medlem

Jag har bara två problem med att använda detta:
1. Om V skulle vara lika med 180 grader, vad gör man då?
2. Jag vill ha en formel så att jag kan använda denna i mitt program, är inte ute efter en ekvation.

Permalänk
Medlem

1. Sin (180) är 0 vilket också avståndet rimligtvis borde bli

Edit 2. Vet inte vilket krav du har på vinklarna osv, men ur optimeringssynpunkt tror jag att det bästa sättet är att räkna ut detta för 360 hela grader och spara undan, speciellt om beräkningen skall göras ofta då den blir ganska krävande.

Visa signatur

Core 2 Quad Q6600 | Gigabyte GA-P35-DS3 | Corsair XMS2-6400 2x2048MB | Corsair HX 520W | BFG 8800GT

Permalänk
Medlem

Det enda jag kan komma på är att du bygger en pappersmodell som du sedan ändrar vinkeln v och läser ut vad y blir. Sen när du har ett par mätvärden tar du och låter excel plotta ut punkterna och sen kan du få ut en fin formel av det.

Permalänk
Medlem

fel fel

trött trött

Visa signatur

Core 2 Quad Q6600 | Gigabyte GA-P35-DS3 | Corsair XMS2-6400 2x2048MB | Corsair HX 520W | BFG 8800GT

Permalänk
Medlem

cochese: Denna fungerade tyvärr inte :/.

Permalänk

Som jag ser det är det inte svårare än:
y = L+R - sqrt(L^2-(R*cosv)^2)-R*sinv

(tänk på att C++:s trigonometriska funktioner tar radianer)

EDIT: glömde en term

Visa signatur

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

Permalänk
Medlem

Slashdotcom, kräver inte din formel att figuren är en rätvinklig triangel eller vad använder du för trigformler, huvudet hänger inte med idag.

Visa signatur

Core 2 Quad Q6600 | Gigabyte GA-P35-DS3 | Corsair XMS2-6400 2x2048MB | Corsair HX 520W | BFG 8800GT

Permalänk
Medlem

Kan inte använda "upphöjt till", utan då får jag fel. Jag blev tvungen att ändra så att det blev: y = l+r - sqrt(l*l-(r*cos(v))*(r*cos(v)))-r*sin(v);

Och denna fungerar inte.

(felet jag får när jag använder "upphöjt till": invalid operands `float' and `int' to binary `operator ^')

Permalänk
Medlem

Skriv en square() eller använd pow()

Visa signatur

Core 2 Quad Q6600 | Gigabyte GA-P35-DS3 | Corsair XMS2-6400 2x2048MB | Corsair HX 520W | BFG 8800GT

Permalänk

x' = Rcosv
y' = Rsinv

L² = (x')²+k² ger att
k = sqrt(L²-(x')²) = sqrt(L² - (Rcosv)²);

då måste
y = L+R-k-y' = L + R - sqrt(L² - (Rcosv)²) - Rsinv

tänkte jag. Sen verkar det inte stämma med testdatat som gavs men men

Visa signatur

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

Permalänk
Medlem

Dock undrar jag verkligen vilken vinkel det är du mäter... För som det ser ut på din skiss mäter du vinkeln från ett ställe du har hittat på, medans den egentligen ska mätas så som jag har skissat - dvs rakt uppifrån, och då skulle vinkeln på din bild inte vara långt ifrån 360 grader (orkar inte ta fram gradskiva och mäta ordentligt).

Permalänk
Citat:

Ursprungligen inskrivet av RasmusB
Dock undrar jag verkligen vilken vinkel det är du mäter... För som det ser ut på din skiss mäter du vinkeln från ett ställe du har hittat på, medans den egentligen ska mätas så som jag har skissat - dvs rakt uppifrån, och då skulle vinkeln på din bild inte vara långt ifrån 360 grader (orkar inte ta fram gradskiva och mäta ordentligt).

Hittat på och hittat på, det är därifrån man alltid mäter, se enhetscirkeln:

Vill du ha noll någon annanstans får du kompensera med en fasvinkel.

Visa signatur

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

Permalänk
Medlem

Ja, det är där man mäter om du kollar på enhetscirkeln. Men i mitt fall kan du inte göra så... Eftersom att om vi säger att du mäter från höger - dvs 0 grader - och du flyttar L från sin ursprungsposition - dvs rakt upp - så kommer du att få ett helt inkorrekt gradantal, enligt min räkning. Jag mäter gradantalet mellan den streckade linjen till r, dvs hur många grader L har förflyttat sig från sin ursprungsposition - precis som ett vevparti till valfri motor som jag skrev i mitt inlägg.

Permalänk

Ok, du får förskjuta vinkeln 90 grader i så fall. Det bör göra susen.

Visa signatur

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

Permalänk
Medlem

Testade det nu och tyvärr fungerade det inte :/.
Jag var lite osäker på om L² var en variabel eller om det var L*L du menade men jag gjorde iaf ett försök och enlig din formel skulle avståndet Y vara 4,0 någonting.

v2=v-90
y = l+r-sqrt(l*l-(r*cos(v2))*(r*cos(v2)))-r*sin(v2)

Är iaf väldigt tacksam för att ni försöker hjälpa mig!

Permalänk
Medlem

Uträkningen som cochese skrev är rätt:
v2 = asin(R/L*sin(v))
v3 = 180-v2-v
x = sin(v3)*L/sin(v)
y = L+R-x
Slashdotcoms uträkning såg oxå ut att vara rätt men den har jag inte tänkt igenom. Funkar det inte så har du skrivit fel eller inte konverterat till radianer tror jag
x i radianer = (y i grader)/180*pi

Permalänk
Medlem

v2 = asin(r/l*sin(v));
v3 = 180-v2-v;
x = sin(v3)*l/sin(v);
y = l+r-x;

Jag får verkligen inte denna till att fungera... Och jag anger V som 198, l som 88 samt r som 39 så blir detta 982,696. Måste ju vara jag som gör NÅGOT fel eftersom den är korrekt enligt er.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av RasmusB
v2 = asin(r/l*sin(v));
v3 = 180-v2-v;
x = sin(v3)*l/sin(v);
y = l+r-x;

Jag får verkligen inte denna till att fungera... Och jag anger V som 198, l som 88 samt r som 39 så blir detta 982,696. Måste ju vara jag som gör NÅGOT fel eftersom den är korrekt enligt er.

nån nämnde radianer, dina vinklar är i grader.

Vrad = Vgrad / 360 * 2pi.

edit: missa vb's post

Permalänk

Ä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

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

x' = Rcosv
y' = Rsinv

cos/sin är inverterat.

#include <iostream> #include <math.h> #define PI 3.14159265 using namespace std; float trig(float); float L = 10.f; float R = 4.f; void main() { cout << "Enter angle (degrees): "; int angle; cin >> angle; float radAngle = static_cast<float>(angle) / 180 * PI; cout << trig(radAngle) << endl; system("PAUSE"); } float trig(float V) { float x = R * sin(V); float y = R * cos(V); float k = sqrt(L*L-(x*x)); return L+R-k-y; }

borde funka.

Permalänk
Medlem

Ville bara säga att jag är djupt imponerade av er allihopa! Fattar inte ett ord i den här tråden

Visa signatur

AMD Ryzen 5 5600 | MSI B450M Mortar | Sapphire Radeon RX 7900 XT 20GB | Corsair Vengeance LPX 16GB - 3200MHz | FD Define C |

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Tooth
Ville bara säga att jag är djupt imponerade av er allihopa! Fattar inte ett ord i den här tråden

Har man läst natur/teknik så är matte C och D obligatoriskt.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av RasmusB

v2 = asin(r/l*sin(v));
v3 = 180-v2-v;
x = sin(v3)*l/sin(v);
y = l+r-x;

Jag får verkligen inte denna till att fungera... Och jag anger V som 198, l som 88 samt r som 39 så blir detta 982,696. Måste ju vara jag som gör NÅGOT fel eftersom den är korrekt enligt er.

Sorry, tänkte inte på att skriva ut att om du har v2 och v i radianer så måste du givetvis konvertera v3 oxå: v3 = pi-v2-v istället för 180-v2-v. Om du gör så blir ditt exempel ca 77.

Permalänk
Citat:

Ursprungligen inskrivet av smekhet
cos/sin är inverterat.

Sällan. http://mathworld.wolfram.com/PolarCoordinates.html

Visa signatur

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