Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Bienenflug (Schleifen)

Bienenflug

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.

  1. Bestimmen Sie ihre Flugbahn (x- und y-Koordinaten), indem Sie die Position der Biene für jede Sekunde wieder neu berechnen.
  2. Variieren Sie die Zeit zwischen zwei Neuberechnungen der Bienenposition.
  3. Stellen Sie die Flugbahn grafisch dar.

Dateien:

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

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

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 2
Schwierigkeit: k.A.
Webcode: jgjj-c8uv
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen