Thursday, 26 October 2017

Moving Average Filter Java


Die Bildfilterung kann je nach Effekt in zwei Gruppierungen gruppiert werden: Tiefpassfilter (Glättung) Tiefpassfilterung (aka Glättung) wird eingesetzt, um das räumliche Frequenzrauschen aus einem digitalen Bild zu entfernen. Die Tiefpaßfilter verwenden gewöhnlich einen bewegten Fensteroperator, der ein Pixel des Bildes zu einem Zeitpunkt beeinflußt und seinen Wert durch irgendeine Funktion eines lokalen Bereichs (Fensters) von Pixeln ändert. Der Bediener bewegt sich über das Bild, um alle Pixel im Bild zu beeinflussen. Hochpassfilter (Kantenerkennung, Schärfen) Ein Hochpassfilter kann verwendet werden, um ein Bild schärfer zu machen. Diese Filter betonen feine Details im Bild - das Gegenteil des Tiefpaßfilters. Hochpass-Filter funktioniert in der gleichen Weise wie Tiefpass-Filterung verwendet es nur einen anderen Faltungs-Kernel. Beim Filtern eines Bildes wird jedes Pixel von seinen Nachbarn beeinflusst, und der Nettoeffekt der Filterung verschiebt Informationen um das Bild herum. In diesem Kapitel, verwenden Sie dieses Bild: Bogotobogo Website-Suche: Bogotobogo Website-Suche: Mittlere Filterung ist einfach zu implementieren. Es wird als eine Methode zum Glätten von Bildern verwendet, wodurch der Betrag der Intensitätsänderung zwischen einem Pixel und dem nächsten verringert wird, was das Reduzieren von Rauschen in Bildern verursacht. Die Idee der mittleren Filterung ist einfach, jeden Pixelwert in einem Bild mit dem mittleren (durchschnittlichen) Wert seiner Nachbarn zu ersetzen, einschließlich selbst. Dies hat die Wirkung, Pixelwerte zu eliminieren, die ihrer Umgebung nicht repräsentativ sind. Die mittlere Filterung wird üblicherweise als Faltungsfilter betrachtet. Wie andere Windungen basiert es um einen Kern, der die Form und Größe der Nachbarschaft darstellt, die bei der Berechnung des Mittelwerts abgetastet werden soll. Oft wird ein 3-facher 3-Quadrat-Kernel verwendet, wie unten gezeigt: Der mf ist der mittlere Filter: Der Filter2 () ist definiert als: Y filter2 (h, X) filtert die Daten in X mit dem zweidimensionalen FIR-Filter in der Matrix h. Es berechnet das Ergebnis, Y, mit zweidimensionaler Korrelation und gibt den zentralen Teil der Korrelation zurück, der die gleiche Größe wie X hat. Er gibt den durch den Formparameter angegebenen Teil von Y zurück. Form ist ein String mit einem dieser Werte: voll. Gibt die vollständige zweidimensionale Korrelation zurück. In diesem Fall ist Y größer als X. gleich. (Default) Gibt den zentralen Teil der Korrelation zurück. In diesem Fall ist Y die gleiche Größe wie X. gültig. Gibt nur die Teile der Korrelation zurück, die ohne nullgepolsterte Kanten berechnet werden. In diesem Fall ist Y kleiner als X. Nun wollen wir den im vorigen Abschnitt definierten Kernel mit filter2 () anwenden: Wir können sehen, dass das gefilterte Bild (rechts) im Vergleich zum ursprünglichen Eingang (links) . Wie bereits erwähnt, kann das Tiefpassfilter verwendet werden. Lass es testen Zuerst, um die Eingabe ein wenig schmutzig zu machen, spritzen wir etwas Pfeffer und Salz auf das Bild und wenden dann den mittleren Filter an: Es hat eine gewisse Wirkung auf das Salz - und Pfeffergeräusch, aber nicht viel. Es hat sie nur verschwommen gemacht. Wie wäre es mit dem Versuch, die Matlabs eingebaute Median Filter Bogotobogo Website Suche: Bogotobogo Website Suche: Median Filter - medfilt2 () Hier ist das Skript: Viel besser. Anders als der vorherige Filter, der gerade Mittelwert verwendet, dieses Mal haben wir Median verwendet. Median-Filterung ist eine nichtlineare Operation, die häufig in der Bildverarbeitung verwendet wird, um Salz - und Pfeffergeräusche zu reduzieren. Beachten Sie auch, dass das medfilt2 () 2-D-Filter ist, also funktioniert es nur für Graustufenbild. Für Lärm entfernen für RGB-Bild, gehen Sie bitte bis zum Ende dieses Kapitels: Entfernen von Rauschen im RGB-Bild. Matlab bietet eine Methode zur Erstellung eines vordefinierten 2-D-Filters. Sein fspecial (): h fspecial (Typ) erzeugt einen zweidimensionalen Filter h des angegebenen Typs. Es gibt h als Korrelationskernel zurück, welches die entsprechende Form ist, um mit imfilter () zu verwenden. Der Typ ist ein String mit einem dieser Werte: Matlab Image und Video Verarbeitung OpenCV 3 - Bild Videoverarbeitung OpenCV 3 Bild - und Videoverarbeitung mit PythonEinführung Der vorherige Artikel untersuchte, welche gleitenden Durchschnitte sind und wie man sie berechnet. Dieser Artikel schaut jetzt, wie man diese in Web Intelligence implementiert. Die hier verwendete Formel ist mit der XIr3-Version von SAP BOE kompatibel, aber einige Formel kann in früheren Versionen funktionieren, falls verfügbar. Wir beginnen mit dem Betrachten, wie man einen einfachen gleitenden Durchschnitt berechnet, bevor man gewichtete und exponentielle Formen betrachtet. Bearbeitete Beispiele Die nachfolgenden Beispiele verwenden den gleichen Datensatz, der aus Aktienkursdaten in einer Excel-Datei besteht, die Sie herunterladen können. Die erste Spalte in der Datei ist der Tag des Aktienkurses und dann Spalten des Eröffnungskurses, höchster Preis am Tag, niedrigster Preis, Schlusskurs, Volumen und angepaßter Schlusskurs. Wir verwenden den Schlusskurs in unserer Analyse unten zusammen mit dem Date-Objekt. Simple Moving Average Es gibt ein paar Möglichkeiten, mit denen wir einfache gleitende Durchschnitte berechnen können. Eine Option besteht darin, die Vorherige Funktion zu verwenden, um den Wert einer vorherigen Zeile zu erhalten. Zum Beispiel berechnet die folgende Formel einen gleitenden Durchschnitt auf unserem Schlusskurs für einen gleitenden durchschnittlichen Datensatz von Größe 3, das ist eine ganz einfache Formel aber es ist offensichtlich, dass es nicht praktisch ist, wenn wir eine große Anzahl von Perioden haben, die wir hier machen können Verwendung von RunningSum Formel und für einen Datensatz von Größe N haben wir endlich haben wir eine 3. Technik, die zwar komplizierter ist, kann es eine bessere Leistung haben, da es den neuen Wert auf der Grundlage des vorherigen Wertes anstatt zwei laufende Summen über die vollständigen Daten berechnet Set. Diese Formel funktioniert jedoch nur nach dem N-ten Punkt im Gesamtdatensatz und da sie sich auf einen vorherigen Wert bezieht, müssen wir auch einen Startwert setzen. Unten ist die volle Formel für unsere Aktienkursanalyse verwendet, wo unsere gleitende durchschnittliche Periode 15 Tage ist, das Datum 1252010 ist der 15. Datenpunkt in unserem Datensatz und so für diesen Punkt berechnen wir einen normalen Durchschnitt mit dem RunningSum. Für alle Termine jenseits dieses Wertes verwenden wir unsere SMA-Formel und wir lassen alle Termine vor diesem Datum leer. Abbildung 1 unten ist ein Diagramm in Web Intelligence, das unsere Aktienkursdaten mit einem einfachen gleitenden Durchschnitt anzeigt. Abbildung 1. Web Intelligence-Dokument zeigt eine einfache verschiebende durchschnittliche gewichtete bewegliche Durchschnitt Eine gewichtete gleitende durchschnittliche Formel mit einer Periode von 3 ist, wie bei unserer ersten einfachen gleitenden durchschnittlichen Formel oben ist dies nur für eine kleine Anzahl von Perioden praktisch. Ich habe noch nicht in der Lage, eine einfache Formel zu finden, die für größere gleitende durchschnittliche Perioden verwendet werden kann. Mathematisch ist es möglich, aber Einschränkungen mit Web Intelligence bedeutet, dass diese Formeln don8217t konvertieren. Wenn jemand in der Lage ist, dies zu tun, würde ich gerne hören Die folgende Abbildung ist ein WMA von Periode 6 in Web Intelligence implementiert. Abbildung 2. Web Intelligence-Dokument eines gewichteten beweglichen durchschnittlichen exponentiellen Moving Average Ein exponentieller gleitender Durchschnitt ist ganz einfach, um in Web Intelligence zu implementieren und ist daher eine geeignete Alternative zu einem gewichteten Moving Average. Die Grundformel ist hier hart codiert 0,3 als unser Wert für Alpha. Wir wenden diese Formel nur für Perioden an, die größer sind als unsere zweite Periode, so dass wir eine if-Anweisung verwenden können, um diese zu filtern. Für unsere erste und zweite Periode können wir den vorherigen Wert verwenden und so ist unsere endgültige Formel für EMA, unten ist ein Beispiel für eine EMA, die auf unsere Bestandsdaten angewendet wird. Abbildung 3. Web Intelligence-Dokument zeigt eine exponentielle Moving Average Input Controls Als unsere EMA Formel doesn8217t auf die Größe der gleitenden durchschnittlichen Zeitraum verlassen und unsere einzige Variable ist Alpha können wir Input Controls verwenden, damit der Benutzer den Wert von Alpha anpassen. Um dies zu tun, erstellen Sie eine neue Variable namens 8216alpha8217 und definieren it8217s Formel als, aktualisieren Sie unsere EMA Formel zu, Erstellen Sie eine neue Eingabesteuerung Auswahl unserer Alpha-Variable als Eingabe-Control-Report-Objekt Verwenden Sie einen einfachen Schieberegler und legen Sie die folgenden Eigenschaften, Sobald Sie getan haben Sollte in der Lage sein, den Schieberegler zu bewegen und sofort die Änderungen an der Trendlinie im Diagramm zu sehen. Fazit Wir haben uns gefragt, wie wir drei Arten von gleitendem Durchschnitt in Web Intelligence implementieren können und obwohl alles möglich war, ist der Exponential Moving Average wahrscheinlich der einfachste und flexibelste . Ich hoffe du hast diesen Artikel interessant gefunden und wie immer ist jedes Feedback sehr willkommen. Post navigation Hinterlasse eine Antwort Antworten abbrechen Du musst eingeloggt sein, um einen Kommentar zu posten. Der Trick zu Weighted Moving Average (WMA) ist, dass du eine Variable erstellen musst, die die Zähler von WMA repräsentiert (siehe Wikipedia als Referenz). Dies sollte wie folgt aussehen: Zurück (Self) (n Close) 8211 (Zurück (RunningSum ( Schließen)) 8211 Zurück (RunningSum (Schließen) n1) wobei n die Anzahl der Perioden ist, dann wäre die eigentliche WMA8217s Formel so: Numerator (n (n 1) 2) wobei Numerator die zuvor erstellte Variable ist.1.5 Input Und Ausgabe In diesem Abschnitt erweitern wir die Menge der einfachen Abstraktionen (Kommandozeilen-Input und Standard-Ausgabe), die wir als Schnittstelle zwischen unseren Java-Programmen und der Außenwelt verwendet haben, um Standard-Input-Standard-Zeichnung und Standard-Audio Input macht es bequem für uns, Programme zu schreiben, die beliebige Mengen an Input verarbeiten und mit unseren Programmen interagieren. Standard-Draw macht es möglich, dass wir mit Grafik arbeiten und Standard-Audio fügt Sound. Vogelperspektive. Ein Java-Programm nimmt Eingabewerte von Die Befehlszeile und druckt eine Zeichenfolge als Ausgabe. Standardmäßig sind sowohl Befehlszeilenargumente als auch Standardausgabe einer Anwendung zugeordnet, die Befehle enthält, die wir als Terminalfenster bezeichnen. Hier finden Sie einige Anweisungen zur Verwendung der Befehlszeile auf Ihrem System. Mac middot Windows middot Linux Befehlszeilenargumente. Alle unsere Klassen haben eine main () Methode, die ein String Array Args als Argument nimmt. Dieses Array ist die Folge von Befehlszeilenargumenten, die wir eingeben. Wenn wir beabsichtigen, dass ein Argument eine Zahl ist, müssen wir eine Methode wie Integer. parseInt () verwenden, um sie von String in den entsprechenden Typ zu konvertieren. Standardausgabe. Um die Ausgabewerte in unseren Programmen zu drucken, verwenden wir System. out. println (). Java sendet die Ergebnisse an einen abstrakten Stream von Zeichen, die als Standardausgabe bekannt sind. Standardmäßig verbindet das Betriebssystem die Standardausgabe mit dem Terminalfenster. Die gesamte Ausgabe in unseren Programmen ist bisher im Terminalfenster erschienen. RandomSeq. java verwendet dieses Modell: Es nimmt ein Kommandozeilenargument n und druckt zur Standardausgabe eine Folge von n Zufallszahlen zwischen 0 und 1. Um unser Programmiermodell zu vervollständigen, fügen wir folgende Bibliotheken hinzu: Standardeingabe. Lesen Sie Zahlen und Strings vom Benutzer. Standardzeichnung. Plot Grafiken. Standard-Audio. Klang erzeugen Standardausgabe. Javas System. out. print () und System. out. println () Methoden implementieren die grundlegende Standardausgabe Abstraktion, die wir benötigen. Trotzdem verwenden wir ähnliche Methoden, die in unserer StdOut-Bibliothek definiert sind: Javas print () und println () Methoden, die Sie haben, um die Standard-Input - und Standard-Ausgabe einheitlich zu behandeln (und einige technische Verbesserungen vorzulegen) Verwendet haben. Die printf () - Methode gibt uns mehr Kontrolle über das Aussehen der Ausgabe. Formatierte Druckgrundlagen. In seiner einfachsten Form nimmt printf () zwei Argumente an. Das erste Argument wird als Formatzeichenfolge bezeichnet. Es enthält eine Umwandlungsspezifikation, die beschreibt, wie das zweite Argument in einen String für die Ausgabe konvertiert werden soll. Format-Strings beginnen mit und enden mit einem Ein-Buchstaben-Umwandlungscode. Die folgende Tabelle fasst die am häufigsten verwendeten Codes zusammen: Format string. Der Formatstring kann Zeichen zusätzlich zu denen für die Umwandlungsspezifikation enthalten. Die Conversion-Spezifikation wird durch den Argumentwert ersetzt (in einen String wie angegeben umgewandelt) und alle restlichen Zeichen werden an die Ausgabe übergeben. Mehrere Argumente Die Funktion printf () kann mehr als zwei Argumente ausführen. In diesem Fall hat der Formatstring eine zusätzliche Konvertierungsspezifikation für jedes weitere Argument. Hier ist mehr Dokumentation auf printf format string syntax. Standard input. Unsere StdIn-Bibliothek nimmt Daten aus einem Standard-Eingangsstrom auf, der eine Folge von durch Whitespace getrennten Werten enthält. Jeder Wert ist ein String oder ein Wert aus einem der Javas-Primitivtypen. Eines der Hauptmerkmale des Standard-Eingangsstroms ist, dass Ihr Programm Werte verbraucht, wenn es sie liest. Sobald Ihr Programm einen Wert gelesen hat, kann es nicht wieder gesichert werden und es nochmal lesen. Die Bibliothek wird durch die folgende API definiert: Wir betrachten nun mehrere Beispiele im Detail. Eingabe eingeben. Wenn du den Java-Befehl benutzt, um ein Java-Programm von der Befehlszeile aus aufzurufen, machst du eigentlich drei Dinge: (1) Ausgabe eines Befehls zum Starten des Programms, (2) Festlegen der Werte der Befehlszeilenargumente und ( 3) beginnen, den Standard-Eingangsstrom zu definieren. Die Zeichenfolge, die Sie im Terminalfenster nach der Befehlszeile eingeben, ist der Standard-Eingangsstrom. Zum Beispiel nimmt AddInts. java ein Befehlszeilenargument n ein. Dann liest man n Zahlen aus der Standard-Eingabe und fügt sie hinzu und druckt das Ergebnis zur Standardausgabe: Eingabeformat. Wenn Sie abc oder 12.2 oder true eingeben, wenn StdIn. readInt () ein int erwartet. Dann wird es mit einer InputMismatchException antworten. StdIn behandelt Strings von aufeinanderfolgenden Whitespace-Zeichen als identisch mit einem Leerzeichen und erlaubt Ihnen, Ihre Zahlen mit solchen Strings zu begrenzen. Interaktive Benutzereingaben. TwentyQuestions. java ist ein einfaches Beispiel für ein Programm, das mit seinem Benutzer interagiert. Das Programm erzeugt eine zufällige Ganzzahl und gibt dann Hinweise auf einen Benutzer, der versucht, die Nummer zu erraten. Der grundlegende Unterschied zwischen diesem Programm und anderen, die wir geschrieben haben, ist, dass der Benutzer die Möglichkeit hat, den Kontrollfluss zu ändern, während das Programm ausgeführt wird. Verarbeiten eines beliebigen Eingangsstroms. Typischerweise sind die Eingangsströme endlich: Ihr Programm marschiert durch den Eingabestrom und verbraucht Werte, bis der Stream leer ist. Aber es gibt keine Beschränkung der Größe des Eingangsstroms. Average. java liest in einer Folge von reellen Zahlen aus der Standard-Eingabe und druckt ihren Durchschnitt. Umleitung und Rohrleitung. Für viele Anwendungen ist die Eingabe von Eingabedaten als Standard-Eingangsstrom aus dem Terminal-Fenster unhaltbar, da damit unsere Programme die Leistungsfähigkeit um die Datenmenge beschränken, die wir eingeben können. In ähnlicher Weise wollen wir oft die auf dem Standardausgangsstrom gedruckten Informationen für spätere Verwendung speichern. Wir können Betriebssystemmechanismen verwenden, um beide Probleme zu lösen. Umleiten der Standardausgabe in eine Datei. Durch Hinzufügen einer einfachen Anweisung zu dem Befehl, der ein Programm aufruft, können wir seine Standardausgabe in eine Datei umleiten, entweder für permanente Speicherung oder für die Eingabe zu einem anderen Programm zu einem späteren Zeitpunkt. Beispielsweise gibt der Befehl an, dass der Standardausgabestream nicht im Terminalfenster gedruckt werden soll, sondern stattdessen in eine Textdatei mit dem Namen data. txt geschrieben werden soll. Jeder Aufruf von StdOut. print () oder StdOut. println () fügt Text am Ende dieser Datei hinzu. In diesem Beispiel ist das Endergebnis eine Datei, die 1.000 zufällige Werte enthält. Umleiten der Standardausgabe aus einer Datei. Ebenso können wir die Standard-Eingabe umleiten, so dass StdIn Daten aus einer Datei anstelle des Terminalfensters liest. Zum Beispiel gibt der Befehl eine Sequenz von Zahlen aus der Datei data. txt und berechnet ihren Mittelwert. Insbesondere ist das lt-Symbol eine Richtlinie, um den Standard-Eingangsstrom zu implementieren, indem er aus der Datei data. txt liest, anstatt darauf zu warten, dass der Benutzer etwas in das Terminalfenster eintippt. Wenn das Programm StdIn. readDouble () aufruft. Das Betriebssystem liest den Wert aus der Datei. Diese Möglichkeit, die Standard-Eingabe aus einer Datei umzuleiten, ermöglicht es uns, riesige Mengen an Daten aus jeder beliebigen Quelle mit unseren Programmen zu verarbeiten, die nur durch die Größe der Dateien, die wir speichern können, begrenzt sind. Verbinden von zwei Programmen. Die flexibelste Art, die Standard-Input - und Standard-Output-Abstraktionen zu implementieren, besteht darin, festzulegen, dass sie durch eigene Programme implementiert werden. Dieser Mechanismus heißt Pipeline. Beispielsweise zeigen die folgenden Befehle an, dass die Standardausgabe für RandomSeq und der Standard-Eingangsstrom für Average der gleiche Stream sind. Filter. Für viele gemeinsame Aufgaben ist es praktisch, an jedes Programm als Filter zu denken, das einen Standard-Eingangsstrom in einen beliebigen Ausgabestream in irgendeiner Weise umwandelt. RangeFilter. java nimmt zwei Befehlszeilenargumente und druckt auf Standardausgabe diese Zahlen von der Standard-Eingabe Die in den angegebenen Bereich fallen. Ihr Betriebssystem bietet auch eine Reihe von Filtern. Zum Beispiel stellt der Sortierfilter die Zeilen auf Standard-Eingabe in sortierter Reihenfolge: Ein weiterer nützlicher Filter ist mehr. Die Daten aus der Standard-Eingabe liest und zeigt sie in Ihrem Terminal-Fenster ein Screenful zu einer Zeit. Zum Beispiel, wenn Sie eingeben, sehen Sie so viele Zahlen wie in Ihrem Terminal-Fenster passen, aber mehr wird auf Sie warten, um die Leertaste zu schlagen, bevor Sie jede nachfolgende Screenful. Standardzeichnung. Jetzt stellen wir eine einfache Abstraktion zur Herstellung von Zeichnungen als Ausgabe vor. Wir stellen uns eine abstrakte Zeichnungsvorrichtung vor, die in der Lage ist, Linien und Punkte auf einer zweidimensionalen Leinwand zu zeichnen. Das Gerät ist in der Lage, auf die Befehle zu antworten, die unsere Programme in Form von Anrufen zu statischen Methoden in StdDraw ausgeben. Die primäre Schnittstelle besteht aus zwei Arten von Methoden: Zeichnen von Befehlen, die dazu führen, dass das Gerät eine Aktion ausführt (z. B. Zeichnen einer Linie oder Zeichnen eines Punktes) und Kontrollbefehle, die Parameter wie die Stiftgröße oder die Koordinatenwaagen festlegen. Grundlegende Zeichnungsbefehle. Wir betrachten zunächst die Zeichnungsbefehle: Diese Methoden sind fast selbstdokumentierend: StdDraw. line (x0, y0, x1, y1) zeichnet ein Geradensegment, das den Punkt (x 0. y 0) mit dem Punkt (x 1 1). StdDraw. point (x, y) zeichnet einen Punkt, der auf den Punkt (x. Y) zentriert ist. Die Standard-Koordinatenskala ist das Einheitsplatz (alle x - und y-Koordinaten zwischen 0 und 1). Die Standardimplementierung zeigt die Leinwand in einem Fenster auf Ihrem Computerbildschirm an, mit schwarzen Linien und Punkten auf weißem Hintergrund. Ihre erste Zeichnung. Die HelloWorld für Grafikprogrammierung mit StdDraw ist ein Dreieck mit einem Punkt innen zu zeichnen. Triangle. java erreicht dies mit drei Anrufen zu StdDraw. line () und einem Aufruf zu StdDraw. point (). Steuerbefehle. Die Standard-Canvas-Größe ist 512-mal-512 Pixel und das Standard-Koordinatensystem ist das Einheits-Quadrat, aber wir wollen oft Plots auf verschiedenen Skalen zeichnen. Auch wollen wir oft Liniensegmente unterschiedlicher Dicke oder Punkte unterschiedlicher Größe vom Standard zeichnen. Um diesen Bedürfnissen gerecht zu werden, hat StdDraw die folgenden Methoden: Beispielsweise setzt die Zwei-Call-Sequenz die Zeichenkoordinaten innerhalb eines Begrenzungsfeldes, dessen untere linke Ecke bei (x 0 y 0) liegt und deren obere rechte Ecke ist Bei (x 1, y 1). Filtern von Daten zu einer Standardzeichnung. PlotFilter. java liest eine Folge von Punkten, die durch (x. Y) Koordinaten von der Standard-Eingabe definiert sind, und zeichnet einen Punkt an jedem Punkt. Es nimmt die Konvention an, dass die ersten vier Zahlen auf der Standard-Eingabe die Begrenzungsbox angeben, damit sie das Diagramm skalieren kann. Plotten eines Funktionsgraphen FunctionGraph. java zeichnet die Funktion y sin (4 x) sin (20 x) im Intervall (0, pi) auf. Es gibt unendlich viele Punkte im Intervall, also müssen wir mit der Auswertung der Funktion an einer endlichen Anzahl von Punkten innerhalb des Intervalls zu tun haben. Wir probieren die Funktion aus, indem wir einen Satz von x-Werten auswählen und dann y-Werte auswerten, indem wir die Funktion bei jedem x-Wert auswerten. Das Plotten der Funktion durch das Verbinden von aufeinanderfolgenden Punkten mit Linien erzeugt eine sogenannte stückweise lineare Näherung. Ausrichtung und gefüllte Formen. StdDraw enthält auch Methoden, um Kreise, Rechtecke und beliebige Polygone zu zeichnen. Jede Form definiert eine Kontur. Wenn der Methodenname nur der Formname ist, wird dieser Umriß durch den Zeichenstift verfolgt. Wenn der Methodenname mit gefüllt beginnt. Die Namensform wird stattdessen fest gefüllt, nicht verfolgt. Die Argumente für den Kreis () definieren einen Kreis des Radius r die Argumente für Quadrat () definieren ein Quadrat der Seitenlänge 2r auf den gegebenen Punkt zentriert und die Argumente für Polygon () definieren ein Abfolge von Punkten, die wir durch Linien verbinden, einschließlich eines vom letzten Punkt bis zum ersten Punkt. Text und Farbe. Um verschiedene Elemente in Ihren Zeichnungen zu annotieren oder hervorzuheben, enthält StdDraw Methoden zum Zeichnen von Text, zum Einstellen der Schriftart und zum Einstellen der Tinte in den Stift. In diesem Code sind java. awt. Font und java. awt. Color Abstraktionen, die implementiert sind Mit nicht-primitiven Typen, die Sie in Abschnitt 3.1 erfahren werden. Bis dahin verlassen wir die Details an StdDraw. Die Standard-Tintenfarbe ist schwarz, die Standardschriftart ist eine 16-Punkt-Serif-Schriftart. Doppelpufferung StdDraw unterstützt eine leistungsstarke Computergrafik-Funktion, die als Doppelpufferung bekannt ist. Wenn die doppelte Pufferung durch Aufruf von enableDoubleBuffering () aktiviert ist. Alle zeichnung findet auf der offscreen canvas statt. Die Offscreen-Leinwand wird nicht angezeigt, sie existiert nur im Computerspeicher. Erst wenn du Show () nennst, wird deine Zeichnung aus der Offscreen-Leinwand auf die Leinwand Leinwand kopiert. Wo es im Standard-Zeichnungsfenster angezeigt wird. Du kannst an doppelte Pufferung denken, indem du alle Zeilen, Punkte, Formen und Texte sammelt, die du ihm erzählst, und sie alle gleichzeitig zu ziehen, auf Wunsch. Ein Grund für die doppelte Pufferung ist für die Effizienz bei der Durchführung einer großen Anzahl von Zeichnungsbefehlen. Computeranimationen Unser wichtigster Einsatz von Doppelpufferung ist die Herstellung von Computeranimationen. Wo wir die Illusion der Bewegung durch schnelles Anzeigen von statischen Zeichnungen schaffen. Wir können Animationen produzieren, indem wir die folgenden vier Schritte wiederholen: Löschen Sie die offscreen Leinwand. Zeichnen von Objekten auf dem Offscreen Kopieren Sie die Offscreen-Leinwand auf die Leinwand. Warten Sie kurz. Zur Unterstützung dieser Schritte hat das StdDraw mehrere Methoden: Das Hallo, World Programm für Animation ist es, einen schwarzen Ball zu produzieren, der sich auf der Leinwand zu bewegen scheint und von der Grenze nach den Gesetzen der elastischen Kollision abprallt. Angenommen, der Ball ist an der Position (x. Y) und wir wollen den Eindruck erwecken, dass er sich in eine neue Position bewegt, sagen wir (x 0,01, y 0,02). Wir tun dies in vier Schritten: Löschen Sie die offscreen Leinwand zu weiß. Zeichnen Sie einen schwarzen Ball an der neuen Position auf der Offscreen-Leinwand. Kopiere die offscreen-Leinwand auf die Leinwand. Warten Sie kurz. Um die Illusion der Bewegung zu schaffen, verbreitet BouncingBall. java diese Schritte für eine ganze Sequenz von Positionen des Balles. Bilder. Unsere Standard-Draw-Bibliothek unterstützt Zeichnungsbilder sowie geometrische Formen. Der Befehl StdDraw. picture (x, y, Dateiname) zeichnet das Bild im angegebenen Dateinamen (entweder JPEG, GIF oder PNG-Format) auf der Leinwand, zentriert auf (x, y). BouncingBallDeluxe. java illustriert ein Beispiel, wo der Hüpfball durch ein Bild eines Tennisballs ersetzt wird. Benutzerinteraktion. Unsere Standard-Draw-Bibliothek enthält auch Methoden, so dass der Benutzer mit dem Fenster mit der Maus interagieren kann. Ein erstes Beispiel. MouseFollower. java ist die HelloWorld der Maus-Interaktion. Es zieht einen blauen Ball, zentriert auf die Lage der Maus. Wenn der Benutzer die Maustaste gedrückt hält, wechselt der Ball von blau nach cyan. Ein einfacher Attraktor. OneSimpleAttractor. java simuliert die Bewegung eines blauen Balles, der von der Maus angezogen wird. Es macht auch eine Schleppkraft aus. Viele einfache Attraktoren. SimpleAttractors. java simuliert die Bewegung von 20 blauen Kugeln, die von der Maus angezogen werden. Es macht auch eine Schleppkraft aus. Wenn der Benutzer klickt, verteilen sich die Kugeln nach dem Zufallsprinzip. Entspringt Springs. java implementiert ein Federsystem. Standard-Audio. StdAudio ist eine Bibliothek, die Sie zum Abspielen und Manipulieren von Audiodateien verwenden können. Es erlaubt Ihnen zu spielen, zu manipulieren und zu synthetisieren. Wir stellen einige grundlegende Konzepte hinter einem der ältesten und wichtigsten Bereiche der Informatik und des wissenschaftlichen Rechnens vor: Digitale Signalverarbeitung. Konzert A. Konzert A ist eine Sinuswelle, skaliert, um mit einer Frequenz von 440 mal pro Sekunde zu oszillieren. Die Funktion sin (t) wiederholt sich einmal alle 2pi Einheiten auf der x-Achse, also wenn wir t in Sekunden messen und die Funktion sin (2pi t mal 440) zeichnen, erhalten wir eine Kurve, die 440 mal pro Sekunde oszilliert. Die Amplitude (y-Wert) entspricht der Lautstärke. Wir nehmen an, dass es zwischen minus1 und 1 skaliert ist. Weitere Anmerkungen. Eine einfache mathematische Formel charakterisiert die anderen Noten auf der chromatischen Skala. Sie sind gleichmäßig auf eine logarithmische (Basis 2) Skala geteilt: Es gibt zwölf Noten auf der chromatischen Skala, und wir erhalten die i-te Anmerkung über einer gegebenen Note, indem wir ihre Frequenz mit der (i 12) th Macht von 2 multiplizieren. Wenn du Doppelt oder halbieren Sie die Frequenz, Sie bewegen sich nach oben oder unten eine Oktave auf der Skala. Zum Beispiel 880 Hertz ist eine Oktave über Konzert A und 110 Hertz ist zwei Oktaven unter dem Konzert A. Sampling. Für den digitalen Ton repräsentieren wir eine Kurve, indem wir sie in regelmäßigen Abständen probieren, und zwar genau wie bei der Darstellung von Funktionsgraphen. Wir probieren genügend oft, dass wir eine genaue Darstellung der curvemdasha weit verbreitet Probenahme Rate ist 44.100 Proben pro Sekunde. Es ist so einfach: Wir stellen Ton als Array von Zahlen dar (reale Zahlen, die zwischen minus1 und 1 liegen). Zum Beispiel spielt das folgende Codefragment Konzert A für 10 Sekunden. Spiele diese Melodie. PlayThatTune. java ist ein Beispiel, das zeigt, wie leicht wir mit StdAudio Musik erstellen können. Es nimmt Notizen von der Standard-Eingabe, indiziert auf der chromatischen Skala von Konzert A, und spielt sie auf Standard-Audio. Schreiben Sie ein Programm MaxMin. java, das Integers (so viele wie der Benutzer eingibt) aus der Standard-Eingabe und druckt die maximale und minimale Werte. Schreiben Sie ein Programm Stats. java, das ein Integer-Befehlszeilenargument n nimmt. Liest n Gleitkommazahlen von der Standard-Eingabe und druckt ihren Mittelwert (Mittelwert) und probiert die Standardabweichung (Quadratwurzel der Summe der Quadrate ihrer Differenzen vom Durchschnitt, dividiert durch n minus1). Schreiben Sie ein Programm LongestRun. java, das in einer Folge von ganzen Zahlen liest und druckt sowohl die Ganzzahl, die in einem längsten aufeinander folgenden Lauf und die Länge des Laufs erscheint. Wenn zum Beispiel der Eingang 1 2 2 1 5 1 1 7 7 7 7 1 1 ist. Dann sollte dein Programm am längsten laufen: 4 aufeinanderfolgende 7s. Schreiben Sie ein Programm WordCount. java, das Text aus der Standard-Eingabe liest und die Anzahl der Wörter im Text ausdruckt. Für die Zwecke dieser Übung ist ein Wort eine Folge von Nicht-Whitespace-Charakteren, die von Leerzeichen umgeben ist. Schreiben Sie ein Programm Closest. java, das drei Gleitkomma-Befehlszeilenargumente (x, y, z) annimmt, liest aus der Standard-Eingabe eine Folge von Punktkoordinaten ((xi, yi, zi)) und druckt die Koordinaten des Punktes Am nächsten ((x, y, z)). Erinnern Sie sich, dass das Quadrat des Abstandes zwischen ((x, y, z)) und ((xi, yi, zi)) ((x - xi) 2 (y - yi) 2 (z - zi) 2) ist. Für die Effizienz, verwenden Sie nicht Math. sqrt () oder Math. pow (). Angesichts der Positionen und Massen einer Folge von Objekten, schreiben Sie ein Programm, um ihre Mitte-of-Masse oder Schwerpunkt zu berechnen. Der Schwerpunkt ist die durchschnittliche Position der n Objekte, gewichtet nach Masse. Wenn die Positionen und Massen durch (xi yi mi) gegeben sind, dann ist der Schwerpunkt (x. Y. m) gegeben durch: Schreiben Sie ein Programm Centroid. java, das in einer Folge von Positionen und Massen liest (xi yi. Mi) von der Standard-Eingabe und druckt den Schwerpunkt (x. Y) aus. Hinweis. Modelliere dein Programm nach Average. java. Schreiben Sie ein Programm Checkerboard. java, das ein Befehlszeilenargument n annimmt und ein n-by-n Schachbrett mit roten und schwarzen Quadraten zeichnet. Farbe links unten links rot. Schreiben Sie ein Programm Rose. java, das ein Kommandozeilenargument n annimmt und eine Rose mit n Blütenblättern (wenn n ungerade ist) oder 2n Blütenblättern (wenn n gerade ist), indem Sie die Polarkoordinaten (r, theta) der Funktion r zeichnen Sin (n mal theta) für theta von 0 bis 2pi radiant. Unten ist die gewünschte Ausgabe für n 4, 7 und 8. Schreiben Sie ein Programm Banner. java, das einen String s aus der Kommandozeile nimmt und es im Banner-Stil auf dem Bildschirm anzeigt, von links nach rechts bewegt und zurück zum Anfang wickelt Der Saite, da das Ende erreicht ist. Fügen Sie ein zweites Befehlszeilenargument hinzu, um die Geschwindigkeit zu steuern. Schreiben Sie ein Programm Circles. java, das gefüllte Kreise von zufälliger Größe an zufälligen Positionen in der Einheit Quadrat, produziert Bilder wie die unten. Ihr Programm sollte vier Befehlszeilenargumente nehmen: die Anzahl der Kreise, die Wahrscheinlichkeit, dass jeder Kreis schwarz ist, der minimale Radius und der maximale Radius. Kreative Übungen Spirographs. Schreiben Sie ein Programm Spirograph. java, das drei Befehlszeilenargumente R, r und a nimmt und den resultierenden Spirograph zeichnet. Ein Spirograph (technisch eine Epizykloide) ist eine Kurve, die durch das Rollen eines Kreisradius r um einen größeren festen Kreis oder Radius R gebildet wird. Wenn der Stiftversatz von der Mitte des Rollkreises (ra) ist, dann ist die Gleichung der resultierenden Kurve zum Zeitpunkt t ist gegeben von solchen Kurven wurden von einem meistverkauften Spielzeug, das Scheiben mit Zahnradzähne an den Rändern und kleinen Löchern, die Sie einen Stift in Spur Spirographen zu verfolgen, Für einen dramatischen 3d-Effekt zeichnen Sie ein kreisförmiges Bild, z. B. Earth. gif statt eines Punktes, und zeige es im Laufe der Zeit. Heres ein Bild des resultierenden Spirographen, wenn R 180, r 40 und ein 15. Uhr. Schreiben Sie ein Programm Clock. java, das eine Animation der zweiten, Minuten - und Stundenzeiger einer analogen Uhr anzeigt. Verwenden Sie die Methode StdDraw. show (1000), um die Anzeige etwa einmal pro Sekunde zu aktualisieren. Hinweis. Dies kann eine der seltenen Zeiten sein, wenn du den Operator mit einem Doppelten benutzen möchtest - es funktioniert so, wie du es erwarten würdest. Oszilloskop. Schreiben Sie ein Programm Oscilloscope. java, um die Ausgabe eines Oszilloskops zu simulieren und produzieren Lissajous Muster. Diese Muster sind nach dem französischen Physiker Jules A. Lissajous benannt, der die Muster untersucht hat, die entstehen, wenn zwei gegenseitig senkrechte periodische Störungen gleichzeitig auftreten. Nehmen wir an, dass die Eingänge sinusförmig sind, so dass die folgenden parametrischen Gleichungen die Kurve beschreiben: Nehmen Sie die sechs Parameter A x. W x Die Steuer . Theta y W y Und theta y von der Kommandozeile aus. Zum Beispiel hat das erste Bild unten Ax Ay 1, w x 2, w y 3, theta x 20 Grad, theta y 45 Grad. Der andere hat Parameter (1, 1, 5, 3, 30, 45) Webübungen Wort - und Zeilenzahl. Ändern Sie WordCount. java so, dass in Text aus Standard-Eingabe liest und druckt die Anzahl der Zeichen, Wörter und Zeilen im Text. Niederschlagsproblem Schreiben Sie ein Programm Rainfall. java, das in nichtnegativen Ganzzahlen (was Niederschlag repräsentiert) ein zu einer Zeit bis 999999 eingegeben wird, und dann druckt den Durchschnitt des Wertes (nicht einschließlich 999999). Duplikate entfernen Schreiben Sie ein Programm Duplicates. java, das in einer Folge von Ganzzahlen liest und druckt die Ganzzahlen, außer dass es wiederholte Werte entfernt, wenn sie nacheinander erscheinen. Zum Beispiel, wenn die Eingabe 1 2 2 1 5 1 1 7 7 7 7 1 1 ist, sollte Ihr Programm ausdrucken 1 2 1 5 1 7 1. Lauflängencodierung. Schreiben Sie ein Programm RunLengthEncoder. java, das eine Binäreingabe mit Lauflängencodierung kodiert. Schreiben Sie ein Programm RunLengthDecoder. java, das eine lauflängencodierte Nachricht decodiert. Kopf und Schwanz Schreiben Sie Programme Head. java und Tail. java, die einen Integer-Befehlszeileneingang N nehmen und die ersten oder letzten N Zeilen der angegebenen Datei ausdrucken. (Drucken Sie die ganze Datei aus, wenn es darum besteht Beispielsweise wird die Nachricht VENI, VIDI, VICI in YHQL, YLGL, YLFL konvertiert. Schreiben Sie ein Programm Caesar. java, das ein Befehlszeilenargument k annimmt und eine Caesar-Chiffre mit Shift k an anwendet Eine Sequenz von Briefen, die von der Standard-Eingabe gelesen werden. Wenn ein Brief kein Großbuchstabe ist, schreib es einfach aus. Cäsar-Chiffrier-Decodierung Wie würdest du eine Nachricht verschlüsseln, die mit einem Caesar-Chiffre-Hinweis verschlüsselt ist, solltest du keinen Code schreiben Paritätsprüfung Eine Boolesche Matrix hat die Paritätseigenschaft, wenn jede Zeile und jede Spalte eine gerade Summe hat. Dies ist eine einfache Art von Fehlerkorrekturcode, denn wenn ein Bit in der Übertragung beschädigt ist (Bit wird von 0 auf 1 oder von verschoben 1 bis 0) es kann erkannt und repariert werden Heres eine 4 x 4 Eingabedatei, die die Paritätseigenschaft hat: Schreiben Sie ein Programm ParityCheck. java, das eine Integer N als Kommandozeileneingabe annimmt und in einem N-by-N Boolean liest Matrix aus der Standard-Eingabe und gibt an, ob (i) die Matrix die Paritätseigenschaft hat oder (ii) anzeigt, welches einzelne beschädigte Bit (i, j) umgedreht werden kann, um die Paritätseigenschaft wiederherzustellen, oder (iii) zeigt an, dass die Matrix war Beschädigt (mehr als zwei Bits müssen geändert werden, um die Paritätseigenschaft wiederherzustellen). Verwenden Sie so wenig interne Speicher wie möglich. Hinweis: Sie müssen nicht einmal die Matrix-Takagis-Funktion speichern. Plot Takagis Funktion: überall stetig, nirgendwo differenzierbar. Tramperproblem Sie interviewen N Kandidaten für die alleinige Position von American Idol. Jede Minute bekommst du einen neuen Kandidaten zu sehen, und du hast eine Minute zu entscheiden, ob oder nicht zu erklären, dass Person die American Idol. Sie können nicht Ihre Meinung ändern, sobald Sie beenden Interview mit dem Kandidaten. Angenommen, Sie können jeden Kandidaten sofort mit einer einzigen realen Zahl zwischen 0 und 1 bewerten, aber natürlich wissen Sie nicht die Bewertung der Kandidaten noch nicht gesehen. Entwerfen Sie eine Strategie und schreiben Sie ein Programm AmericanIdol, das mindestens eine Chance hat, den besten Kandidaten auszuwählen (vorausgesetzt, die Kandidaten kommen in zufälliger Reihenfolge), lesen Sie die 500 Datenwerte aus der Standard-Eingabe. Lösung: Interview für N2 Minuten und notiere die Bewertung des bisher besten Kandidaten. In den nächsten N2 Minuten, wähle den ersten Kandidaten, der eine höhere Bewertung als die aufgezeichnete hat. Dies ergibt mindestens eine 25 Chance, da Sie den besten Kandidaten bekommen, wenn der zweitbeste Kandidat in den ersten N2 Minuten ankommt und der beste Kandidat in den letzten N2 Minuten ankommt. Dies kann leicht auf 1e 0,36788 verbessert werden, indem im Wesentlichen die gleiche Strategie verwendet wird, aber Umschalten zur Zeit Ne. Verschachtelte Diamanten. Schreiben Sie ein Programm Diamonds. java, das eine Befehlszeile Eingabe N und Plots N verschachtelten Quadrate und Diamanten nimmt. Unten ist die gewünschte Ausgabe für N 3, 4 und 5. Regelmäßige Polygone. Erstellen Sie eine Funktion, um einen N-Gon zu zeichnen, zentriert auf (x, y) der Größenlänge s. Verwenden Sie die Funktion, um verschachtelte Polygone wie das Bild unten zu zeichnen. Gewölbte Quadrate Schreiben Sie ein Programm BulgingSquares. java, das die folgende optische Täuschung von Akiyoshi Kitaoka zieht. Das Zentrum scheint sich nach außen zu wölben, obwohl alle Quadrate gleich groß sind. Spiralende Mäuse Angenommen, N-Mäuse, die auf den Ecken eines regulären Polygons mit N-Seiten beginnen, und jeder Kopf in Richtung der nächsten anderen Maus (im Gegenuhrzeigersinn), bis sie alle treffen. Schreiben Sie ein Programm, um die logarithmischen Spiralpfade zu zeichnen, die sie durch Zeichnen von verschachtelten N-Gons, die in dieser Animation gedreht und geschrumpft sind. Spiral. Schreiben Sie ein Programm, um eine Spirale wie die unten zu zeichnen. Globus. Schreiben Sie ein Programm Globe. java, das ein echtes Kommandozeilen-Argument alpha nimmt und ein globeartiges Muster mit Parameter alpha zeichnet. Plot the polar coordinates (r, theta) of the function f(theta) cos(alpha times theta) for theta ranging from 0 to 7200 degrees. Below is the desired output for alpha 0.8, 0.9, and 0.95. Drawing strings. Write a program RandomText. java that takes a string s and an integer N as command line inputs, and writes the string N times at a random location, and in a random color. 2D random walk. Write a program RandomWalk. java to simulate a 2D random walk and animate the results. Start at the center of a 2N-by-2N grid. The current location is displayed in blue the trail in white. Rotating table. You are seated at a rotating square table (like a lazy Susan), and there are four coins placed in the four corners of the table. Your goal is to flip the coins so that they are either all heads or all tails, at which point a bell rings to notify you that you are done. You may select any two of them, determine their orientation, and (optionally) flip either or both of them over. To make things challenging, you are blindfolded, and the table is spun after each time you select two coins. Write a program RotatingTable. java that initializes the coins to random orientations. Then, it prompts the user to select two positions (1-4), and identifies the orientation of each coin. Next, the user can specify which, if any of the two coins to flip. The process repeats until the user solves the puzzle. Rotating table solver. Write another program RotatingTableSolver. java to solve the rotating table puzzle. One effective strategy is to choose two coins at random and flip them to heads. However, if you get really unlucky, this could take an arbitrary number of steps. Goal: devise a strategy that always solves the puzzle in at most 5 steps. Hex. Hex is a two-player board game popularized by John Nash while a graduate student at Princeton University, and later commercialized by Parker Brothers. It is played on a hexagonal grid in the shape of an 11-by-11 diamond. Write a program Hex. java that draws the board. Projectile motion with drag. Write a program BallisticMotion. java that plots the trajectory of a ball that is shot with velocity v at an angle theta. Account for gravitational and drag forces. Assume that the drag force is proportional to the square of the velocity. Using Newtons equations of motions and the Euler-Cromer method, update the position, velocity, and acceleration according to the following equations: Use G 9.8, C 0.002, and set the initial velocity to 180 and the angle to 60 degrees. Heart. Write a program Heart. java to draw a pink heart: Draw a diamond, then draw two circles to the upper left and upper right sides. Changing square. Write a program that draws a square and changes its color each second. Simple harmonic motion. Repeat the previous exercise, but animate the Lissajous patterns as in this applet. Ex: A B w x w y 1, but at each time t draw 100 (or so) points with phi x ranging from 0 to 720 degrees, and phi x ranging from 0 to 1080 degrees. Bresenhams line drawing algorithm. To plot a line segment from (x1, y1) to (x2, y2) on a monitor, say 1024-by-1024, you need to make a discrete approximation to the continuous line and determine exactly which pixels to turn on. Bresenhams line drawing algorithm is a clever solution that works when the slope is between 0 and 1 and x1 Modify Bresenhams algorithm to handle arbitrary line segments. Millers madness. Write a program Madness. java to plot the parametric equation: where the parameter t is in radians. You should get the following complex picture. Experiment by changing the parameters and produce original pictures. Fays butterfly. Write a program Butterfly. java to plot the polar equation: where the parameter t is in radians. You should get an image like the following butterfly-like figure. Experiment by changing the parameters and produce original pictures. Student database. The file students. txt contains a list of students enrolled in an introductory computer science class at Princeton. The first line contains an integer N that specifies the number of students in the database. Each of the next N lines consists of four pieces of information, separated by whitespace: first name, last name, email address, and section number. The program Students. java reads in the integer N and then N lines of data of standard input, stores the data in four parallel arrays (an integer array for the section number and string arrays for the other fields). Then, the program prints out a list of students in section 4 and 5. Shuffling. In the October 7, 2003 California state runoff election for governor, there were 135 official candidates. To avoid the natural prejudice against candidates whose names appear at the end of the alphabet (Jon W. Zellhoefer), California election officials sought to order the candidates in random order. Write a program program Shuffle. java that takes a command-line argument N, reads in N strings from standard input, and prints them back out in shuffled order. (California decided to randomize the alphabet instead of shuffling the candidates. Using this strategy, not all N possible outcomes are equally likely or even possible For example, two candidates with very similar last names will always end up next to each other.) Reverse. Write a program Reverse. java that reads in an arbitrary number of real values from standard input and prints them in reverse order. Time series analysis. This problem investigates two methods for forecasting in time series analysis. Moving average or exponential smoothing. Polar plots. Create any of these polar plots. Java games. Use StdDraw. java to implement one of the games at javaunlimited. Consider the following program. Suppose the file input. txt contains the following integers: What is the contents of the array a after running the following command High-low. Shuffle a deck of cards, and deal one to the player. Prompt the player to guess whether the next card is higher or lower than the current card. Repeat until player guesses it wrong. Game show. used this. Elastic collisions. Write a program CollidingBalls. java that takes a command-line argument n and plots the trajectories of n bouncing balls that bounce of the walls and each other according to the laws of elastic collisions. Assume all the balls have the same mass. Elastic collisions with obstacles. Each ball should have its own mass. Put a large ball in the center with zero initial velocity. Brownian motion. Statistical outliers. Modify Average. java to print out all the values that are larger than 1.5 standard deviations from the mean. You will need an array to store the values. Optical illusions. Create a Kofka ring or one of the other optical illusions collected by Edward Adelson. Computer animation. In 1995 James Gosling presented a demonstration of Java to Sun executives, illustrating its potential to deliver dynamic and interactive Web content. At the time, web pages were fixed and non-interactive. To demonstrate what the Web could be, Gosling presented applets to rotate 3D molecules, visualize sorting routines, and Duke cart-wheeling across the screen. Java was officially introduced in May 1995 and widely adopted in the technology sector. The Internet would never be the same. Program Duke. java reads in the 17 images T1.gif through T17.gif and produces the animation. To execute on your computer, download the 17 GIF files and put in the same directory as Duke. java . (Alternatively, download and unzip the file duke. zip or duke. jar to extract all 17 GIFs.) Cart-wheeling Duke. Modify Duke. java so that it cartwheels 5 times across the screen, from right to left, wrapping around when it hits the window boundary. Repeat this cart-wheeling cycle 100 times. Hinweis. after displaying a sequence of 17 frames, move 57 pixels to the left and repeat. Name your program MoreDuke. java. Tac (cat backwards). Write a program Tac. java that reads lines of text from standard input and prints the lines out in reverse order. Game. Implement the game dodge using StdDraw . move a blue disc within the unit square to touch a randomly placed green disc, while avoiding the moving red discs. After each touch, add a new moving red disc. Simple harmonic motion. Create an animation like the one below from Wikipedia of simple harmonic motion. Yin yang. Draw a yin yang using StdDraw. arc() . Twenty questions. Write a program QuestionsTwenty. java that plays 20 questions from the opposite point of view: the user thinks of a number between 1 and a million and the computer makes the guesses. Use binary search to ensure that the computer needs at most 20 guesses. Write a program DeleteX. java that reads in text from standard input and deletes all occurrences of the letter X. To filter a file and remove all Xs, run your program with the following command: Write a program ThreeLargest. java that reads integers from standard input and prints out the three largest inputs. Write a program Pnorm. java that takes a command-line argument p, reads in real numbers from standard input, and prints out their p-norm . The p-norm norm of a vector (x 1 . x N ) is defined to be the pth root of (x 1 p x 2 p . x N p ). Consider the following Java program. Suppose that the file input. txt contains the integers 1 and 1. What does the following command do Modify Add. java so that it re-asks the user to enter two positive integers if the user types in a non-positive integer. Modify TwentyQuestions. java so that it re-asks the user to enter a response if the user types in something other than true or false . Hint: add a do-while loop within the main loop. Nonagram. Write a program to plot a nonagram. Star polygons. Write a program StarPolygon. java that takes two command line inputs p and q, and plots the - star polygon. Complete graph. Write a program to plot that takes an integer N, plots an N-gon, where each vertex lies on a circle of radius 256. Then draw a gray line connecting each pair of vertices. Necker cube. Write a program NeckerCube. java to plot a Necker cube. What happens if you move the StdDraw. clear(Color. BLACK) command to before the beginning of the while loop in BouncingBall. java. Answer . try it and observe a nice woven 3d pattern with the given starting velocity and position. What happens if you change the parameter of StdDraw. show() to 0 or 1000 in BouncingBall. java. Write a program to plot a circular ring of width 10 like the one below using two calls to StdDraw. filledCircle() . Write a program to plot a circular ring of width 10 like the one below using a nested for loop and many calls to StdDraw. point() . Write a program to plot the Olympic rings. Write a program BouncingBallDeluxe. java that embellishes BouncingBall. java by playing a sound effect upon collision with the wall using StdAudio and the sound file pipebang. wav. Last modified on February 20, 2017. Copyright copy 2000ndash2016 Robert Sedgewick and Kevin Wayne. Alle Rechte vorbehalten.

No comments:

Post a Comment