Bienenflug (Schleifen)
Eine Biene fliegt von ihrem Stock aus auf eine 50 m entfernte Blume zu, wobei sie eine Geschwindigkeit von 1.5 m/s hat. Die Blume befindet sich im Osten des Bienenstocks. Nach Norden weht der Südwind mit 60 cm/s. Die Biene reagiert darauf, indem sie ihren Kurs immer wieder neu auf die Blume ausrichtet.
- Bestimmen Sie ihre Flugbahn (x- und y-Koordinaten), indem Sie die Position der Biene für jede Sekunde wieder neu berechnen.
- Variieren Sie die Zeit zwischen zwei Neuberechnungen der Bienenposition.
- Stellen Sie die Flugbahn grafisch dar.
Dateien:
0 Kommentare
2 Lösung(en)
import java.util.Scanner;
import eu.gressly.gui.turtle.*;
class Paar{ double x, y; }
/**
* Bienenflug Simulation
* @author Philipp Gressly (phi@gressly.ch)
*/
public class Bienenflug {
public static void main(String[] a) {
new Bienenflug().top(); }
Scanner sc = new Scanner(System.in);
double lese(String meldung) {
System.out.println("Bitte geben Sie " + meldung + " ein: ");
return sc.nextDouble(); }
void top() {
double fluggeschwindigkeit = lese("Fluggeschwindigkeit" );
double windgeschwindigkeit = lese("Windgeschwindigkeit" );
double entfernungBlume = lese("Entfernung zur Blume");
starteSimulation(fluggeschwindigkeit, windgeschwindigkeit, entfernungBlume);
}
void starteSimulation(double fluggeschwindigkeit,
double windgeschwindigkeit,
double entfernungBlume) {
Paar aktuelleBienenPosition = new Paar();
aktuelleBienenPosition.x = -entfernungBlume;
aktuelleBienenPosition.y = 0;
ausgabeBienenPosition(aktuelleBienenPosition);
while(distantzBlume(aktuelleBienenPosition) > fluggeschwindigkeit) {
aktuelleBienenPosition = neuePosition(aktuelleBienenPosition, fluggeschwindigkeit, windgeschwindigkeit);
ausgabeBienenPosition(aktuelleBienenPosition); }
}
Paar altePos;
Turtle biene = SideNeckedTurtle.createTurtle();
void ausgabeBienenPosition(Paar aktuelleBienenPosition) {
if(null != altePos) { // noch nicht initialisiert
biene.moveTo(aktuelleBienenPosition.x, aktuelleBienenPosition.y);
altePos = aktuelleBienenPosition; }
else {
biene.drawTo(aktuelleBienenPosition.x, aktuelleBienenPosition.y);}
System.out.println("(x,y) = (" + aktuelleBienenPosition.x + ", " + aktuelleBienenPosition.y + ")");}
Paar neuePosition(Paar aktuelleBienenPosition,
double fluggeeschwindigkeit,
double windgeschwindigkeit) {
double x, y, dx, dy, f2;
x = aktuelleBienenPosition.x;
y = aktuelleBienenPosition.y;
f2 = fluggeeschwindigkeit * fluggeeschwindigkeit;
dx = Math.sqrt(f2 / (1 + y*y/(x*x)));
dy = y * dx /x;
Paar neuePos = new Paar();
neuePos.x = x + Math.abs(dx);
neuePos.y = y - Math.abs(dy) + windgeschwindigkeit;
return neuePos; }
double distantzBlume(Paar aktuelleBienenPosition) {
// Pythagoras
return Math.sqrt(aktuelleBienenPosition.x * aktuelleBienenPosition.x +
aktuelleBienenPosition.y * aktuelleBienenPosition.y); }
} // end of class Bienenflug
# Bienenflug Simulation
from turtle import TurtleScreen, RawTurtle, TK
# Variablen
v = 1.5 # m/s Geschwindigkeit
w = 0.6 # m/s Seitenwind
s = 50 # m Strecke
def xy_pos(v, w, s):
x = -s
y = 0
pos = []
while s > 0:
dx = ( v**2 / (1 + y**2 / x**2) ) **(1/2)
dy = y * dx /x
x = x + abs(dx)
y = y - abs(dy) + w
s -= 1
pos.append([x,y])
return pos
if __name__ == '__main__':
# create window, set canvas to window
window = TK.Tk()
window.resizable(False,False)
window.title('Bienenflug Simulation')
c = TK.Canvas(window, width=600, height=400, bg='white', highlightthickness=0)
c.pack()
# set TurtleScreen to canvas
s1 = TurtleScreen(c)
s1.bgcolor('green1')
# setze Start/Endpunkt
x=-205; y=-5
c.create_oval(x,y,x+10,y+10,outline='black',fill='gray50')
x=10; y=-5
c.create_oval(x,y,x+10,y+10,outline='black',fill='orange')
# set Turtle to TurtleScreen
alex = RawTurtle(s1)
alex.color('green1')
alex.setpos(-200, 0)
alex.color("yellow", (1, 0.85, 0.85))
alex.width(1)
alex.speed(0)
# starte Bienenflug
positionen = xy_pos(v, w, s)
for x,y in positionen:
alex.setpos(x,y)
#print(x,y)
# keep window open until user closes it
TK.mainloop()
Lösung von: Alex Groeg (Freies Lernen)
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 2 |
Schwierigkeit: | k.A. |
Webcode: | jgjj-c8uv |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |