2013-11-25 76 views
0

我有一個xy圖,其中有一條直線。我可以通過使用mouseX和mouseY值來拖動線條,但我想爲曲線做這些。如何在處理中拖動曲線

首先,我該如何製作曲線,當我只有一個點的座標時,我該如何拖動它?

+0

什麼框架? – MadProgrammer

+0

http://processing.org/基於Java的處理 – gizgok

+2

http://processing.org/tutorials/curves/ –

回答

1

首先閱讀由@Petros提到的鏈接,然後您需要計算控制點的座標,以便它們躺在您的線上。然後你必須實現拖動點的鼠標事件。你可以從這個基本的例子中受到啓發。

float[] p = { 50, 100, 80, 100, 150, 100, 180, 100 }; 
int point = 0; 

boolean locked = false; 

void setup() { 
    size(300, 200); 
    smooth();  
} 

void draw() { 
    background(255); 

    stroke(0); 
    noFill(); 
    //Here you can just change from bazier to spline curve 
    //curve(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]); 
    bezier(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]); 

    noStroke(); 
    fill(255, 0, 0); 
    ellipse(p[0], p[1], 3, 3); 
    ellipse(p[6], p[7], 3, 3); 
    fill(0, 0, 255, 192); 
    ellipse(p[2], p[3], 3, 3); 
    ellipse(p[4], p[5], 3, 3); 


} 

void mousePressed() { 
    if(overPoint(mouseX, mouseY)) { 
    locked = true; 
    } else { 
    locked = false; 
    } 
} 

void mouseDragged() { 
    if(locked) { 
    p[point] = mouseX; 
    p[point+1] = mouseY; 
    } 
} 

void mouseReleased() { 
    locked = false; 
} 

boolean overPoint(float x, float y){ 
    for(point = 0; point < 7; point += 2){ 
    if(p[point] + 2 > x && p[point] - 2 < x){ 
     if(p[point+1] + 2 > y && p[point+1] - 2 < y){   
     return true; 
     } 
    } 
    } 
    return false; 
}