Matteproblem
Matteproblem
Hej på er alla smarta snillen.
Jag håller på med ett litet projekt för en sjökortssimulator.
Jag själv är ju aktiv inom sjöräddningen i Sverige och har på min station fått en förfrågan om jag inte kan göra en simulatorstation där vi kan öva sök och samband.
Min tanke är att ha en liten låda med en PIC16F877A, knappsats samt en LCD för att kunna ange positioner på olika fartyg enl. AIS systemet, dvs. Fartygs ID, position, kurs, fart m.m.
Sedan skall jag köra över datan från simulatorenheten via en serieport till ett sjökortsprogram i en PC (Liknande NMEA protokollet)
Meningen är att man skall ange ett fartygsid och startposition och sedan kunna ställa in fart samt kurs och då skall PIC räkna ut en ny position en gång varannan sekund.
Men hur räknar jag ut positionen?
Just det ja.... (jag skäms nästan för att säga det, jag kör picbasic )
// Fredrik
Jag håller på med ett litet projekt för en sjökortssimulator.
Jag själv är ju aktiv inom sjöräddningen i Sverige och har på min station fått en förfrågan om jag inte kan göra en simulatorstation där vi kan öva sök och samband.
Min tanke är att ha en liten låda med en PIC16F877A, knappsats samt en LCD för att kunna ange positioner på olika fartyg enl. AIS systemet, dvs. Fartygs ID, position, kurs, fart m.m.
Sedan skall jag köra över datan från simulatorenheten via en serieport till ett sjökortsprogram i en PC (Liknande NMEA protokollet)
Meningen är att man skall ange ett fartygsid och startposition och sedan kunna ställa in fart samt kurs och då skall PIC räkna ut en ny position en gång varannan sekund.
Men hur räknar jag ut positionen?
Just det ja.... (jag skäms nästan för att säga det, jag kör picbasic )
// Fredrik
-
- Inlägg: 2360
- Blev medlem: 16 september 2003, 17:18:13
- Ort: Dubai, United Arab Emirates
- Kontakt:
Som ingångsvärden har du ju X och Y -koordinater och hastighet (m/s) och vinkel (grader 0-359).
Om du utför detta en gång per sekund och mäter hastigheten i meter per sekund så kommer Xändring och Yändring att att innehålla det antal meter som båten har flyttat sig under den sekunden.
Xändring = Hastighet * COS( (Vinkel * PI) / 180)
Yändring = Hastighet * SIN( (Vinkel * PI) / 180)
Sedan så får du konvertera latitud och longitud till en meterposition räknat från lat 0 lon 0. Lägga på ändringarna och konvertera tillbaka till riktig latitud och longitud igen.
Om du utför detta en gång per sekund och mäter hastigheten i meter per sekund så kommer Xändring och Yändring att att innehålla det antal meter som båten har flyttat sig under den sekunden.
Xändring = Hastighet * COS( (Vinkel * PI) / 180)
Yändring = Hastighet * SIN( (Vinkel * PI) / 180)
Sedan så får du konvertera latitud och longitud till en meterposition räknat från lat 0 lon 0. Lägga på ändringarna och konvertera tillbaka till riktig latitud och longitud igen.
för att göra saken änn jobbigare så är cos/sin i PICBasic angivet i "B-RAD". dv.s. löper från -128 till 127 radianer. Därför måste man konvertera grader till "b-rads" också.
De trigonometriska funktionerna lär väl sluka en hel del minne, eftersom de är uppbyggda av maffiga tabeller, eller har jag fel här?
De trigonometriska funktionerna lär väl sluka en hel del minne, eftersom de är uppbyggda av maffiga tabeller, eller har jag fel här?
- MicaelKarlsson
- Inlägg: 4669
- Blev medlem: 18 juni 2004, 09:16:07
- Ort: Aneby
- Kontakt:
Observera att 0 grader är mot norr inte mot öster, antar jag...
Detta ger att sin byts mot cos och tvärtom, se ex nedan.
X,Y = aktuell position (meter)
H = hastighet (m/s)
K_gra = kurs (0-360 grader där 0/360 är mot norr, 90 mot öster, 180 mot söder och 270 mot väster)
distans = H*2 (2 = varannan sekund)
K_rad = K_gra*pi/180 (sin och cos anges oftast i radianer)
X = X + sin(K_rad)*distans (ny X position)
Y = Y + cos(K_rad)*distans (ny Y position)
Detta ger att sin byts mot cos och tvärtom, se ex nedan.
X,Y = aktuell position (meter)
H = hastighet (m/s)
K_gra = kurs (0-360 grader där 0/360 är mot norr, 90 mot öster, 180 mot söder och 270 mot väster)
distans = H*2 (2 = varannan sekund)
K_rad = K_gra*pi/180 (sin och cos anges oftast i radianer)
X = X + sin(K_rad)*distans (ny X position)
Y = Y + cos(K_rad)*distans (ny Y position)
-
- Inlägg: 2360
- Blev medlem: 16 september 2003, 17:18:13
- Ort: Dubai, United Arab Emirates
- Kontakt:
!!! Citat Lorry: 'Att jag inte tänkte på det!'
Här är någon som haft typ samma problem och frågat på Experts-Exchange. Det kan vara en bra punkt att börja gräva utifrån.
http://www.experts-exchange.com/Miscell ... 64650.html
Här är någon som haft typ samma problem och frågat på Experts-Exchange. Det kan vara en bra punkt att börja gräva utifrån.
http://www.experts-exchange.com/Miscell ... 64650.html
Detta var ju inte det enklaste ju.
Skickar en liten länk.
Där står att det inte går att omvandla mellan olika format. Så detta projektet är det noga bara att lägga ner tyvärr.
Skickar en liten länk.
Där står att det inte går att omvandla mellan olika format. Så detta projektet är det noga bara att lägga ner tyvärr.