2016-06-21 44 views
0

我試圖創建一個像this一個線 - 的幫助下順利繪圖工具。 我完成了基礎知識,但我的代碼有幾個問題。與寬鬆鼠標繪製在處理3.0

這裏是我的工作草圖的代碼:

Spring2D s1; 

float gravity = 0; 
float mass = 4.0; 

void setup() { 
    frameRate(60); 
    size(640, 360); 
    fill(255, 126); 
    // Inputs: x, y, mass, gravity 
    s1 = new Spring2D(0.0, width/2, mass, gravity); 
    } 

void draw() { 
    s1.display(mouseX, mouseY); 
    s1.update(mouseX, mouseY); 
    } 

class Spring2D { 
    float vx, vy; // The x- and y-axis velocities 
    float x, y; // The x- and y-coordinates 
    float gravity; 
    float mass; 
    float radius = 10; 
    float stiffness = 0.7; 
    float damping = 0.5; 

    Spring2D(float xpos, float ypos, float m, float g) { 
    x = xpos; 
    y = ypos; 
    mass = m; 
    gravity = g; 
    } 

    void update(float targetX, float targetY) { 
    float forceX = (targetX - x) * stiffness; 
    float ax = forceX/mass; 
    vx = damping * (vx + ax); 
    x += vx; 
    float forceY = (targetY - y) * stiffness; 
    forceY += gravity; 
    float ay = forceY/mass; 
    vy = damping * (vy + ay); 
    y += vy; 
    } 

    void display(float nx, float ny) { 
    if (mousePressed == true) { 

    background(0); 

    stroke(40, 255, 150); 
    line(x, y, nx, ny); 


    noStroke(); 
    fill(255, 130, 40); 
    ellipse(x, y, 5, 5); 

    } else { 
    background(0); 
    } 
    } 
} 

我用綠色的字符串(線)爲指導,這樣它只是給一個彈性摩擦順利借鑑。它僅在畫布被點擊時出現,並且在釋放鼠標時消失。我想要橙點做圖(x,y,nx,ny),而不是我的鼠標座標。 (在這種情況下,不是用球體,而是用建議的連續線)。

的問題是,當我沒有背景設置爲某種顏色(這裏0;後者爲黑色)的引導串(綠線和橙色點),將自己畫在畫布上爲好。但是,我喜歡僅將它們作爲指導,作爲幫手。那麼,我應該怎麼做才能根據橙色點繪製線條而不繪製線條?

+0

當你說該行應該被看到但不被繪製時,你究竟是什麼意思? –

+0

正如我在鏈接中共享的示例圖片所示。輔助線(它的要點)應該繪製筆畫,而不是自己。 @KevinWorkman –

回答

1

即使你有一個非常高的幀率,你的鼠標沒有真正通過屏幕上的每一個像素。它一次移動多個像素,具體取決於您移動鼠標的速度。因此,在兩幀之間,鼠標可以從一個位置移動到另一個位置,而不必移動兩個位置之間的每個位置。

爲了解決這個問題,而不是在當前位置繪製一個橢圓,你可以從以前的位置到當前位置畫線。

在您的Spring2D類中,您必須跟蹤之前的的位置。你可以只使用兩個變量:

float previousX; 
float previousY; 

你需要在你update()函數來更新這些變量。

previousX = x; 
previousY = y; 

然後在你的display()功能,你需要使用這些變量來繪製從先前的點線,以當前點:

strokeWeight(radius*2); 
line(previousX, previousY, x, y); 

這會防止你看到點之間的空間。

如果您有任何其他疑問,請他們在自己的崗位獨立的問題。嘗試將問題縮小到關於特定代碼行的特定問題,或儘可能少的行。很難回答一般的「我該怎麼做」類型的問題。堆棧溢出是爲更具體的「我試過X,預計Y,但得到Z」類型的問題而設計的。如果你想更具體,你會有更好的運氣(和更快的響應時間)。祝你好運,這似乎是一個有趣的項目。

+0

謝謝,但在平滑繪圖時,線條有很多不足之處。如果您可以相應地更新我的代碼並幫助處理其他問題,我會將其作爲答案進行檢查。 ^^ –

+0

@BerdiyaOnur我編輯了我的答案來解釋我在說什麼。 –

+0

謝謝@KevinWorkman,我想我不清楚告訴我想要什麼。但建議畫線而不是圈子對我有很大的幫助。英語不是我的第一語言,但我再次嘗試更新我的問題和代碼。問題只是關於背景。你可以檢查它,否則我不得不提出這是一個新問題。 –