2016-10-12 29 views
1

私はアナログ時計を作りたい、と私はかなり遠いです。私は時計の周りの数字が必要ですが、私はこれらを作る方法を理解できません。私は今、いくつかの点を作っていますが、数字を1〜12の数字に置き換えたいと思います。any1はこれを簡単かつ迅速に行う方法を知っていますか?私のコードは次のようになります:処理、アナログ時計を作る、数字

int cx, cy; 
float secondsRadius; 
float minutesRadius; 
float hoursRadius; 
float clockDiameter; 

void setup() { 
    size(1366,768); 
    stroke(255); 

    float radius = min(width/1.2, height/1.2)/2; 
    secondsRadius = radius * 0.72; 
    minutesRadius = radius * 0.60; 
    hoursRadius = radius * 0.50; 
    clockDiameter = radius * 1.8; 

    cx = width/2; 
    cy = height/2; 
} 

void draw() { 
    background(random(0,255),random(0,255),random(0,255)); 

    // Draw the clock background 
    fill(0); 
    noStroke(); 
    ellipse(cx, cy, clockDiameter, clockDiameter); 

    // Angles for sin() and cos() start at 3 o'clock; 
    // subtract HALF_PI to make them start at the top 
    float s = map(second(), 0, 60, 0, TWO_PI) - HALF_PI; 
    float m = map(minute() + norm(second(), 0, 60), 0, 60, 0, TWO_PI) - HALF_PI; 
    float h = map(hour() + norm(minute(), 0, 60), 0, 24, 0, TWO_PI * 2) - HALF_PI; 

    // Draw the hands of the clock 
    stroke(255); 
    strokeWeight(1); 
    line(cx, cy, cx + cos(s) * secondsRadius, cy + sin(s) * secondsRadius); 
    strokeWeight(2); 
    line(cx, cy, cx + cos(m) * minutesRadius, cy + sin(m) * minutesRadius); 
    strokeWeight(4); 
    line(cx, cy, cx + cos(h) * hoursRadius, cy + sin(h) * hoursRadius); 

    // Draw the dots arround the clock 
    strokeWeight(2); 
    beginShape(POINTS); 
    for (int a = 0; a < 360; a+=30) { 
    float angle = radians(a); 
    float x = cx + cos(angle) * secondsRadius; 
    float y = cy + sin(angle) * secondsRadius; 
    vertex(x, y); 
    } 
    endShape(); 
    textSize(40); 
    text("Dank Clock", 570,40); 
} 
+0

私はJava、thorughを使用しています:-) –

+0

@FlorianAlbrecht OPはJavaをベースにしたProcessing(http://processing.org)を使用しています。 – nbokmans

答えて

1

あなたはすでにクロックを周回し、時計の位置にドットを配置するループを持っています。今必要なのは、それらの位置で時間を描くロジックです。

処理には、text()という機能があり、テキスト(または数字)を画面に描画できます。 vertex()の代わりにそれを呼び出して、時間を描画することができます。

描画時間を得るには、ループのたびに増加する変数intを使用してください。このような何か:あなたの角度が0から始まるので、私は3から始まるんだ

int hour = 3; 
    for (int a = 0; a < 360; a+=30) { 
    float angle = radians(a); 
    float x = cx + cos(angle) * secondsRadius; 
    float y = cy + sin(angle) * secondsRadius; 
    vertex(x, y); 
    fill(255); 

    text(hour, x, y); 
    hour++; 
    if(hour > 12){ 
     hour = 1; 
    } 
    } 

お知らせ、ずっと右を指します。ループが12を超えると、私はhour1に戻し始めます。

おそらく、aから1時間にマップする簡単な数式を計算することもできます。そうすることで、自分で増分する必要はありません。

関連する問題