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
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