2013-11-25 6 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; 
} 
Смежные вопросы