1

巨大ならせんとして描きたい文字列の配列があります。どこから始めればよいのか、非常に大まかな考えしかありません。まず、おそらく文字列を個々の文字の配列に分割する必要がありますか? 次に、らせん形状を生成するために、おそらく次のジオメトリを適用する必要がありますか?

float r = 0;
float theta = 0;

void setup() {
  size(200,200);
  background(255);
}

void draw() {

  float x = r * cos(theta);
  float y = r * sin(theta);

  noStroke();
  fill(0);
  ellipse(x+width/2, y+height/2, 6, 6); 

  theta += 0.01;
  r += 0.05;
}

ただし、スパイラルのような形式で文字を描画するために、文字の配列をステップ実行する方法がわかりません。わかりにくかったことをお詫び申し上げます。どんな提案でも素晴らしいでしょう!私はこれらすべてに非常に慣れていません(明らかに)。

4

1 に答える 1

2

スパイラルを作成するためのコードは良い考えです。回転したテキストを作成する 1 つの方法は、rotate()をtext()と組み合わせて使用​​することです。for ループがあり、文字配列を反復処理し、半径を増やして、そのようにテキストを描画します。rotate()累積効果があることに注意してください。何かのようなもの:

String str = "asdflkkjsahfdlkadshflkahdslkfajsdf";
float radius = 0;
//so we are rotating around the center, rather than (0,0):
translate(width/2, height/2); 
for (int i = 0; i < str.length(); i++) {
  radius += 2;
  // taken out because of non-constant spacing at large radius:
  //rotate(0.5);
  // this should give constant spacing, no matter the radius
  // change 10 to some other number for a different spacing. 
  rotate(10/radius);
  // drawing at (0,radius) because we're drawing onto a rotated canvas
  text(str.charAt(i), 0, radius);
}

角度の変化を半径の関数にしたい場合があります。これは、半径が大きいと、文字が非常に離れて配置されるためです。これを行う 1 つの方法は、式 を使用することですs = rθ。ここで、s は弧の長さ (この場合は文字間の距離)、r は半径、θ は角度の変化です。半径に関係なく、文字間の距離を一定にしたい場合、θ は 1/r に比例する必要があります。もちろん、ハードコードされた値を好みに合わせて調整することもできます。

また、rotate()translate()メソッドは の最後で元に戻されるdraw()ので、このコードの後に​​何もしない場合は、そのままにしておいてかまいません。後でさらに描画したい場合は、他のものを描画する前に手動で回転と移動を元に戻す必要があります。

編集:文字を回転させ、らせん状に配置するだけでなく、通常の向きにしたいと思っていたことに気づきました。その場合、既存のコードを使用して、もちろん適切なパラメータで を にellipse(...)置き換えることができます。text(str.charAt(...)...)

于 2013-10-01T17:08:40.083 に答える