2016-03-25 56 views
0

我寫了一段代碼在所有給定的點上生成curve,代碼如下。它編碼在processing PDE並基於curveVertex()函數。 有沒有什麼辦法可以得到value(x, y)這個curve上的任何一點?如何獲取曲線上任意點的座標值?

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(); 
    } 
} 

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

回答

0

如果你想要知道正在繪製的點的位置,應該使用curvePoint()函數。

curvePoint()函數不繪製點,它返回它們的位置。從參考:

curvePoint()

將評估點A,B,C,d在點t的曲線。參數t 的範圍可以從0(曲線的起點)到1(曲線的末端)。 a和d是曲線上的點,b和c是控制點。這可以在x座標中使用一次,並使用y座標第二次使用 以獲得曲線在t處的位置。

參數

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 

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很多,curvePoint()可以工作。 – lyman988