line関数を用いて点線を描く

ドロー系のソフトウエアであれば点線を描こうとするとき、例えばline関数のオプションを設定することで簡単に点線を描くことができそうですが、processingのline関数にはそのようなオプション設定がないので、自分で作る必要があります。そんなに難しくないのでline関数を用いて点線を描く関数を作成してみました。

void dottedline(
  float x1, // 線分の1つ目の端点のx座標
  float y1, // 線分の1つ目の端点のy座標
  float x2, // 線分の2つ目の端点のx座標
  float y2  // 線分の2つ目の端点のy座標
){
  float sx, sy, ex, ey;
  float seg = 10.0;
  float length = sqrt( pow(x2-x1,2)+pow(y2-y1,2) );
  int seg_num = int(length/seg);
  for(int i=0; i<seg_num; i+=2){
    sx = (x1 * (seg_num -i) + x2 * i)/seg_num;
    sy = (y1 * (seg_num -i) + y2 * i)/seg_num;
    ex = (x1 * (seg_num -(i+1)) + x2 * (i+1))/seg_num;
    ey = (y1 * (seg_num -(i+1)) + y2 * (i+1))/seg_num;
    line(sx, sy, ex, ey);
  }
}  

一応、line関数と同じように2つの端点を決めることで点線を描くことがができます。

void setup(){
  size(400,400); 
  dottedline(50, 50, 350, 350);
}
点線の例

なお、上記の点線の関数は端点の選び方によっては実際よりも長く描かれてしまう可能性があります。その場合、関数内の変数segを調整することで解消されると思いますので、適当に調整してみてください。

コメントを残す