Zur Haupt­na­vi­ga­ti­on sprin­gen [Alt]+[0] Zum Sei­ten­in­halt sprin­gen [Alt]+[1]

Auf­ga­ben zur Im­ple­men­ta­ti­on

Aufgabe zur Implementation

  1. Lade die Datei al­g15_xy­Dia­gramm. Passe das Pro­gramm so an, dass die Mess­wer­te aus der Datei Am­pli­tu­des.csv ge­la­den wer­den. Sie sol­len in den Array x_wer­te bzw. y_wer­te ge­spei­chert wer­den. Be­ach­te, dass es sich bei den Mess­wer­ten um De­zi­mal­zah­len (dou­ble) han­delt. Lade zu­nächst nur die ers­ten 40 Werte.

    Hin­weis: Du musst über­all die neuen Namen der Ar­rays ein­set­zen.

    In der Me­tho­de zeich­ne­Bal­ken soll die Aus­ga­be so an­ge­passt wer­den, dass statt der Spie­ler­na­men die x-Werte und statt der Punkt­zah­len die y-Werte ver­wen­det wer­den. Gib zu­nächst nur die ers­ten 40 Werte aus.

    Hin­weis: Die Brei­te eines Recht­ecks muss eine ganze Zahl (int) sein. Daher muss die Kom­ma­zahl in eine ganze Zahl um­ge­wan­delt wer­den. Dazu wird ein Ty­pe­cast = Ty­pum­wand­lung ver­wen­det:

    int breite = (int) y_werte[i];

    Die Aus­ga­be der Zah­len als Text er­for­dert auch eine Ty­pum­wand­lung. Diese er­reicht man ein­fachs­ten, wenn man die Zahl an einen (lee­ren) String an­hängt:

    text(""+y_werte[i], 2, 4);

  2. Das Bal­ken­dia­gramm soll in ein XY-Dia­gramm um­ge­wan­delt wer­den. Wir zeich­nen zu­nächst für jeden Mess­wert einen Punkt P(x|y) mit dem Be­fehl point(x,y). Be­ach­te, dass die Ko­or­di­na­ten x und y wie­der­um ganze Zah­len sein müs­sen. Ver­wen­de also einen Ty­pe­cast um x und y-Wert zu be­stim­men. Wenn alles klappt, lade alle Daten und zeige sie an.

Ska­lie­rung

Das Dia­gramm klebt noch am obe­ren Rand des Bild­schirms. Es soll die Bild­flä­che mög­lichst gut aus­fül­len. Daher müs­sen wir zwei An­pas­sun­gen vor­neh­men:

Aufgabe zur Implementation

Beim x-Wert muss ein Fak­tor er­rech­net wer­den, der dafür sorgt, dass der größ­te x-Wert der Mess­rei­he auf die größ­te Bild­schirm­ko­or­di­na­te um­ge­rech­net wird:

Fak­tor_x = größ­te­Bild­schirm­ko­or­di­na­te / größ­ter x-Wert der Mes­sung

x-Ko­or­di­na­te = Mess­wert * Fak­tor_x

Mit die­sem Fak­tor muss jeder Mess­wert mul­ti­pli­ziert wer­den, um die rich­ti­ge x-Ko­or­di­na­te des Bild­schirms zu be­kom­men. Für den y-Wert muss ge­nau­so ein Fak­tor be­rech­net wer­den. Beim y-Wert kommt noch hinzu, dass die y-Ko­or­di­na­ten des Bild­schirms von oben nach unten ge­rech­net wer­den. Daher er­gibt sich die y-Ko­or­di­na­te fol­gen­der­ma­ßen:

Fak­tor_y = größ­te­Bild­schirm­ko­or­di­na­te / größ­ter y-Wert der Mes­sung

y-Ko­or­di­na­te = größ­te­Bild­schirm­ko­or­di­na­te - Mess­wert*Fak­tor_y

 

  1. Passe die Me­tho­de su­che­Ma­xi­mum(int[] zah­len) so an, dass sie mit einem Array aus dou­ble-Zah­len ar­bei­ten kann.

    Lasse in der Me­tho­de zeichne­XY­Dia­gramm vor der Schlei­fe für das Zeich­nen der Punk­te das Ma­xi­mum der x-Werte und das Ma­xi­mum der y-Werte mit die­ser Me­tho­de be­stim­men. Be­ach­te, dass der Rück­ga­be­wer­te die Po­si­ti­on des Ma­xi­mums im Array und nicht des­sen Wert ist. Er­mitt­le dar­aus den ma­xi­ma­len x-Wert bzw. y-Wert. Be­rech­ne dann den x- und den y-Fak­tor.

    Beim Zeich­nen der Punk­te be­rech­nest du dann die x- und die y-Ko­or­di­na­te des ska­lier­ten Mess­werts.

  2. Nun sol­len statt Punk­ten Li­ni­en ein­ge­zeich­net wer­den. Diese sol­len zwi­schen zwei auf­ein­an­der­fol­gen­den Mess­punk­ten mit dem Be­fehl line(x1,y1, x2,y2); ge­zeich­net wer­den. Be­stim­me daher in der Schlei­fe zum Zeich­nen auch die Ko­or­di­na­ten des nächs­ten Mess­werts und zeich­ne eine Linie.

    Ach­tung: die Schlei­fen­be­din­gung muss an­ge­passt wer­den, damit es nicht zu einem Array-Index out of Bounds-Feh­ler kommt (man ver­sucht auf ein Array-Ele­ment zu­zu­grei­fen, das es gar nicht gibt). Ver­wen­den die Me­tho­de zur Feh­ler­su­che, um her­aus­fin­den, bei wel­chem i der Feh­ler auf­tritt, wenn man die Schlei­fe nicht an­passt.

 

Phy­si­ka­li­sche Mes­sun­gen schwan­ken oft sehr stark auf­grund von mo­men­ta­nen Ef­fek­ten. Um Trends er­ken­nen zu kön­nen, ist es daher sinn­voll, den Durch­schnitt ei­ni­ger Werte her­an­zu­zie­hen und als Kurve dar­zu­stel­len. Im der Ab­bil­dung oben siehst du bei­spiels­wei­se die Mess­wer­te (grün), ein Mit­tel über je­weils 40 Mess­wer­te (rot) und ein Mit­tel über 500 Mess­wer­te (weiß). In der wei­ßen Kurve kann man den Trend der Laut­stär­ke wäh­rend des ge­sam­ten Un­ter­richts am bes­ten er­ken­nen.

Bsp

Aufgabe zur Implementation

 

  1. Im­ple­men­tie­re eine Me­tho­de dou­ble be­rech­ne­Durch­schnitt(dou­ble[] zah­len, int start, int n), die zu einem ge­ge­be­nen Array, einer Start­po­si­ti­on und einer An­zahl n von Ele­men­ten, den Durch­schnitt der nächs­ten n Array-Werte ab der Start­po­si­ti­on be­rech­net. Ori­en­tie­re dich dabei an der schon im­ple­men­tier­ten Me­tho­de, die den Durch­schnitt aller Zah­len be­rech­net. Be­ach­te, dass es am Ende des Ar­rays pas­sie­ren kann, dass nur noch we­ni­ger als n wei­te­re Werte zur Ver­fü­gung ste­hen. Daher muss man in der Schlei­fen­be­din­gung so­wohl über­prü­fen, ob das Ende des Ar­rays noch nicht er­reicht wurde, als auch, ob die An­zahl noch nicht er­reicht wurde.

  2. Passe die Me­tho­de zeichne­XY­Dia­gramm so an, dass sie einen Pa­ra­me­ter schritt­wei­te ent­ge­gen­nimmt. Passe das Zeich­nen der Li­ni­en so an, dass immer zu­nächst der Durch­schnitt der an­ge­ge­be­nen Schritt­wei­te be­rech­net wird. Die­ser Durch­schnitt wird dann ska­liert und ge­zeich­net.

    Passe den Auf­ruf der Me­tho­de zeichne­XY­Dia­gramm so an, dass der Wert des Pa­ra­me­ters schritt­wei­te über­ge­ben wird. Ex­pe­ri­men­tie­re mit ver­schie­de­nen Schritt­wei­ten. Du kannst auch meh­re­re Dia­gram­me mit un­ter­schied­li­chen Schritt­wei­ten über­ein­an­der zeich­nen las­sen. Ver­än­de­re da­zwi­schen mit stroke(r,g,b) die Farbe des Mal­stif­tes.

 

 

XY-Dia­gramm: Her­un­ter­la­den [odt][230 KB]

XY-Dia­gramm: Her­un­ter­la­den [pdf][209 KB]

 

Wei­ter zu Übung