2013-06-16 6 views
9

Ich nehme eine Klasse, die Verarbeitung verwendet.Wie funktioniert die Funktion map() in der Verarbeitung?

Ich habe ein Problem, die map() - Funktion zu verstehen.

Nach es ist Dokumentation (http://www.processing.org/reference/map_.html):

Re-Karten eine Reihe von einem Bereich zum anderen.

Im ersten obigen Beispiel wird die Zahl 25 von einem Wert im Bereich von 0 bis 100 in einen Wert konvertiert, der von der linken Kante des Fensters (0) bis zur rechten Kante (Breite) reicht.

Wie im zweiten Beispiel gezeigt, werden Zahlen außerhalb des Bereichs nicht an die minimalen und maximalen Parameterwerte geklammert, da Werte außerhalb des Bereichs oft beabsichtigt und nützlich sind.

Ist ähnlich wie eine Zufallsfunktion, aber der Bereich wird vom Benutzer festgelegt? Außerdem kann ich die Erklärung für das erste Beispiel nicht verstehen: Es sagt, dass die Zahl in einen Wert von 0 bis 100 in einen Wert umgewandelt wird, der von Rand zu Rand des Bildschirms reicht. Ich denke, warum nicht einfach direkt die Zahl 25 in den Wertebereich für den Bildschirm konvertieren?

Antwort

19

Die map() Funktion ist eine nützliche Abkürzung und Sie werden nicht die Zeit bereuen, die Sie damit verbracht haben, sie zu verstehen.
Dies ist die Syntax:

variable2 = map (variable1, min1, max1, min2, max2);

Die Funktion wird ein Verhältnis zwischen zwei Wertebereiche:

min1: min2 = max1: max2

Sie können es lesen als: min1 zu min2 als max1 ist ist zu max2.
Variable1 speichert einen Wert zwischen dem ersten Bereich min1 ~ max1.
Variable2 erhält einen Wert zwischen dem zweiten Bereich min2 ~ max2.

Dies ist die Gleichung, die Funktion für den Programmierer löst:

variable2 = min2 + (max2-min2) * ((Variable1-min1)/(max1-min1))

Dies ist Java-Code hinter der Verarbeitungskarte() Funktion:

static public final float map(float value, 
           float istart, 
           float istop, 
           float ostart, 
           float ostop) { 
    return ostart + (ostop - ostart) * ((value - istart)/(istop - istart)); 
} 
+1

Stellen Sie sich einen möglichen Anwendungsfall Ihres Programms vor, der normalisierte (dh 0.0 - 1.0) Werte von etwas erhält und dann verwenden möchte, um die Farbe des Hintergrunds in Processing zu ändern. Sie könnten Hintergrund gehen (Karte (receivedValue, 0.0, 1.0, 0.0, 255.0)); –

+0

@ jesses.coktt: Ich weiß, dass das nicht der Punkt Ihres Kommentars ist, aber in diesem Fall wäre es nicht viel einfacher, einfach 'background (receivedValue * 255.0)' zu tun? – flarn2006

+0

@ flarn2006 ja, map() ist nur eine Komfortfunktion, und manchmal ist es viel einfacher zu tun, wie Sie sagten ... aber ich denke, dass map() ist gut, um für kompliziertere Fälle zu haben ... –

2

denken sie daran, auf diese Weise: teilen eine Reihe von 0 bis 10 in 100 gleiche Teile. (Sie erhalten 0,1 pro Teil) jetzt teilen Sie den Bereich von 0 bis 100 in 100 gleiche Teile (Sie erhalten 1 pro Teil), so 0,1 im Bereich von 0 bis 10 ist gleich 1 im Bereich von 0 bis 100. Wenn Sie möchten Um zu finden, wo 5 im Bereich von 0 bis 10 im Bereich von 0 bis 100 liegt, teilen Sie 5 durch die Größe eines 0 bis 10 Teils und multiplizieren Sie diese Zahl mit der Größe eines 0 bis 100 Teils und Sie erhalten Ihre Antwort !(50)

P.S. Ich weiß, dass das nicht funktioniert, aber ich dachte nur, ich würde ein Beispiel geben, um Dinge zu klären.

Verwandte Themen