2016-03-25 3 views
0

Ich schrieb ein Stück Code, um einen curve über alle angegebenen Punkte zu generieren, der Code ist wie folgt. Es ist in processing PDE codiert und basiert auf curveVertex() Funktion. Gibt es eine Möglichkeit, coordinatevalue(x, y) von einem beliebigen Punkt auf diesem curve zu bekommen?Wie erhält man den Koordinatenwert eines beliebigen Punktes einer Kurve?

int[] lineData = new int[10]; 

void setup() { 
    size(800, 600); 
    intiate(); 
} 

void intiate() { 
    for (int i = 0; i < lineData.length; i ++) { 
    lineData[i] = int(random(100, 600)); 
    } 
} 

void draw() { 
    background(255); 
    translate(100,0); 
    beginShape(); 
    noFill(); 
    curveVertex(0, lineData[0]); 
    for (int i = 0; i < lineData.length; i ++) { 
    strokeWeight(1); 
    curveVertex(i*60, lineData[i]); 
} 
curveVertex((lineData.length-1)*60, lineData[lineData.length-1]); 
endShape(); 

for (int i = 0; i < lineData.length; i ++) { 
    strokeWeight(5); 
    point(i*60, lineData[i]); 
    } 
} 

void keyPressed() { 
    if (key == 'r') { 
    intiate(); 
    } 
} 

================================

Antwort

0

Wenn Sie möchten, Um die Position der gezeichneten Punkte zu kennen, sollten Sie stattdessen die Funktion curvePoint() verwenden.

Die curvePoint() Funktion zeichnet die Punkte nicht, sie gibt ihre Positionen zurück. Aus dem Referenz:

Stützpunkt()

Wertet die Kurve am Punkt t für die Punkte a, b, c, d. Der Parameter t kann zwischen 0 (Beginn der Kurve) und 1 (Ende der Kurve) liegen. a und d sind Punkte auf der Kurve und b und c sind die Kontrollpunkte . Dies kann einmal mit den x-Koordinaten und ein zweites Mal mit den y-Koordinaten verwendet werden, um den Ort einer Kurve bei t zu erhalten.

Parameter

a float: coordinate of first point on the curve 
b float: coordinate of second point on the curve 
c float: coordinate of third point on the curve 
d float: coordinate of fourth point on the curve 
t float: value between 0 and 1 

Beispiel

noFill(); 
curve(5, 26, 5, 26, 73, 24, 73, 61); 
curve(5, 26, 73, 24, 73, 61, 15, 65); 
fill(255); 
ellipseMode(CENTER); 
int steps = 6; 
for (int i = 0; i <= steps; i++) { 
    float t = i/float(steps); 
    float x = curvePoint(5, 5, 73, 73, t); 
    float y = curvePoint(26, 26, 24, 61, t); 
    ellipse(x, y, 5, 5); 
    x = curvePoint(5, 73, 73, 15, t); 
    y = curvePoint(26, 24, 61, 65, t); 
    ellipse(x, y, 5, 5); 
} 
+0

thaks viel können Stützpunkt() arbeiten. – lyman988