13.11.2014 Aufrufe

28. BWINF, Runde 1, Aufgabe 3: Wegfehler - Matthias Springer .DE

28. BWINF, Runde 1, Aufgabe 3: Wegfehler - Matthias Springer .DE

28. BWINF, Runde 1, Aufgabe 3: Wegfehler - Matthias Springer .DE

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Aufgabe</strong> 3<br />

Stefan Hansch, Markus Wirsing, <strong>Matthias</strong> <strong>Springer</strong><br />

173 // nichts machen<br />

174 }<br />

175 else<br />

176 {<br />

177 if (i - db_last_missing < 15)<br />

178 {<br />

179 printf("[W] Es fehlen in einem kleinem<br />

Intervall zu viele Eintraege!\n");<br />

180<br />

181 // Innerhalb eines kleines Intervalls fehlen<br />

zu viele Daten!<br />

182 for (int j = db_last_missing; j < i + 1; j++)<br />

183 {<br />

184 // Alle Koordinaten zuruecksetzen<br />

185 db_pos_x[j] = db_pos_x[i + 1];<br />

186 db_pos_y[j] = db_pos_y[i + 1];<br />

187 }<br />

188 }<br />

189 }<br />

190<br />

191 db_last_missing = i + 1;<br />

192 }<br />

193<br />

194 int currentBestIndex = -1; // Eintrag mit hoechster<br />

Wahrscheinlichkeit<br />

195 double currentBestProbability = 1000000.0; // Wert der<br />

hoechsten Wahrscheinlichkeit<br />

196<br />

197 for (int j = i + 1; j < db_count_entries - 1; j++)<br />

198 {<br />

199 // Berechne Wahrscheinlichkeit fuer den Weg von i<br />

nach j<br />

200 double newProb = db_p_getProbability(<br />

db_calculateDistance(i, j) / (db_time[j] -<br />

db_time[i])) + ((j - i) * 0.45);<br />

201 if (newProb < currentBestProbability)<br />

202 {<br />

203 //printf(" [Min] Neues Minimum bei %d mit %f<br />

fuer [%d].\n", j, newProb, i + 1);<br />

204<br />

205 // Maximum der Wahrscheinlichkeitsfunktion<br />

speichern<br />

206 currentBestProbability = newProb;<br />

207 currentBestIndex = j;<br />

208 }<br />

209 }<br />

210<br />

211 if (currentBestIndex != -1)<br />

212 {<br />

213 // Es wurde eine Loesung gefunden<br />

214<br />

215 if (currentBestIndex > i + 1)<br />

216 {<br />

217 double currentBestSpeedX = (db_pos_x[<br />

currentBestIndex] - db_pos_x[i]) / (db_time[<br />

currentBestIndex] - db_time[i]);<br />

218 double currentBestSpeedY = (db_pos_y[<br />

currentBestIndex] - db_pos_y[i]) / (db_time[<br />

currentBestIndex] - db_time[i]);<br />

219<br />

220 // Aendere Koordinaten des Punktes<br />

221 db_pos_x[i + 1] = db_pos_x[i] + currentBestSpeedX<br />

* (db_time[i + 1] - db_time[i]);<br />

222 db_pos_y[i + 1] = db_pos_y[i] + currentBestSpeedY<br />

* (db_time[i + 1] - db_time[i]);<br />

223<br />

224 printf("[W] Aendere Koordinaten des Punktes %d<br />

auf (%d | %d).\n", i + 1, db_pos_x[i + 1],<br />

db_pos_y[i + 1]);<br />

225 printf(" Geschwindigkeit: %f Pixel / Sekunde.\<br />

n", sqrt(currentBestSpeedX *<br />

currentBestSpeedX + currentBestSpeedY *<br />

currentBestSpeedY));<br />

226<br />

20

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!