◆連続曲線描画

情報


概要

ベジェゴン描画:曲線で囲まれた図形を描画する。
曲線描画:曲線を描画する。

解説

引数

座標列:座標(CSV)

返り値

なし

サンプルプログラム

//テスト
線太さは1
塗りスタイルは『べた』
塗り色は$AA9988
『200,200,300,200,300,50,400,50,400,200,500,200,500,250,350,250,200,250』でベジェゴン描画
線色は青色
線太さは3
『120,130,100,150,150,180,180,100,120,50』で曲線描画

//本体

最大区分数とは整数
最大区分数は50

●ベジェゴン描画(座標列で)
 点列とは配列
 曲線配列とは配列
 点位置とは配列
 リピート数とは整数
 倍率とは整数
 点列は座標列を『,』で区切る
 もし(点列の配列要素数)<6ならば
  戻る
 最大区分数はFLOOR(128/(点列の配列要素数))//エラー対策
 点列に点列[0]を配列追加
 点列に点列[1]を配列追加
 点列に点列[2]を配列追加
 点列に点列[3]を配列追加
 点列に点列[4]を配列追加
 点列に点列[5]を配列追加
 リピート数はINT(((点列の配列要素数)-6)/2)
 リピート数の回
  点位置[0]は点列[回数*2]
  点位置[1]は点列[回数*2+1]
  点位置[6]は点列[回数*2+2]
  点位置[7]は点列[回数*2+3]
  倍率はSQRT((点位置[6]-点位置[0])^2+(点位置[7]-点位置[1])^2)とSQRT((点列[回数*2-2]-点位置[6])^2+(点列[回数*2-1]-点位置[7])^2)の割り算
  点位置[2]は点位置[0]+(点位置[6]-点列[回数*2-2])*倍率*0.4
  点位置[3]は点位置[1]+(点位置[7]-点列[回数*2-1])*倍率*0.4
  倍率はSQRT((点位置[0]-点位置[6])^2+(点位置[1]-点位置[7])^2)とSQRT((点位置[0]-点列[回数*2+4])^2+(点位置[1]-点列[回数*2+5])^2)の割り算
  点位置[4]は点位置[6]+(点位置[0]-点列[回数*2+4])*倍率*0.4
  点位置[5]は点位置[7]+(点位置[1]-点列[回数*2+5])*倍率*0.4
  曲線配列に(((点位置を『,』で配列結合)のベジェ曲線)の終点カット)を配列追加
 曲線配列は曲線配列を『,』で配列結合
 最大区分数は50//エラー対策:解除
 母艦に曲線配列で多角形

●曲線描画(座標列で)
 点列とは配列
 曲線配列とは配列
 点位置とは配列
 リピート数とは整数
 倍率とは整数
 点列は座標列を『,』で区切る
 もし(点列の配列要素数)<6ならば
  座標列を連続線描画
  戻る
 リピート数は((点列の配列要素数)-2)/2
 リピート数の回
  点位置[0]は点列[(回数-1)*2]
  点位置[1]は点列[(回数-1)*2+1]
  点位置[6]は点列[(回数-1)*2+2]
  点位置[7]は点列[(回数-1)*2+3]
  もし回数<=1ならば
   倍率はSQRT((点位置[0]-点位置[6])^2+(点位置[1]-点位置[7])^2)とSQRT((点位置[0]-点列[(回数-1)*2+4])^2+(点位置[1]-点列[(回数-1)*2+5])^2)の割り算
   点位置[4]は点位置[6]+(点位置[0]-点列[(回数-1)*2+4])*倍率*0.4
   点位置[5]は点位置[7]+(点位置[1]-点列[(回数-1)*2+5])*倍率*0.4
   点位置[2]は点位置[0]+(点位置[4]-点位置[0])*0.7
   点位置[3]は点位置[1]+(点位置[5]-点位置[1])*0.7
  違えば
   もし回数>=リピート数ならば
    倍率はSQRT((点位置[6]-点位置[0])^2+(点位置[7]-点位置[1])^2)とSQRT((点列[(回数-1)*2-2]-点位置[6])^2+(点列[(回数-1)*2-1]-点位置[7])^2)の割り算
    点位置[2]は点位置[0]+(点位置[6]-点列[(回数-1)*2-2])*倍率*0.4
    点位置[3]は点位置[1]+(点位置[7]-点列[(回数-1)*2-1])*倍率*0.4
    点位置[4]は点位置[6]+(点位置[2]-点位置[6])*0.7
    点位置[5]は点位置[7]+(点位置[3]-点位置[7])*0.7
   違えば
    倍率はSQRT((点位置[6]-点位置[0])^2+(点位置[7]-点位置[1])^2)とSQRT((点列[(回数-1)*2-2]-点位置[6])^2+(点列[(回数-1)*2-1]-点位置[7])^2)の割り算
    点位置[2]は点位置[0]+(点位置[6]-点列[(回数-1)*2-2])*倍率*0.4
    点位置[3]は点位置[1]+(点位置[7]-点列[(回数-1)*2-1])*倍率*0.4
    倍率はSQRT((点位置[0]-点位置[6])^2+(点位置[1]-点位置[7])^2)とSQRT((点位置[0]-点列[(回数-1)*2+4])^2+(点位置[1]-点列[(回数-1)*2+5])^2)の割り算
    点位置[4]は点位置[6]+(点位置[0]-点列[(回数-1)*2+4])*倍率*0.4
    点位置[5]は点位置[7]+(点位置[1]-点列[(回数-1)*2+5])*倍率*0.4
  曲線配列は点位置を『,』で配列結合
  曲線配列のベジェ曲線を連続線描画

●割り算(左値と右値の)
 もし右値が0でなければ
  (左値/右値)で戻る
 0で戻る

●連続線描画(座標列を)
 点列とは配列
 点列は座標列を『,』で区切る
 (((点列の配列要素数)-2)/2)の回
  母艦の点列[(回数-1)*2],点列[(回数-1)*2+1]から点列[(回数-1)*2+2],点列[(回数-1)*2+3]へ線

●終点カット(座標列の)
 点列とは配列
 曲線配列とは配列
 点列は座標列を『,』で区切る
 ((点列の配列要素数)-2)の回
  曲線配列に点列[回数-1]を配列追加
 (曲線配列を『,』で配列結合)で戻る

●ベジェ曲線(座標列の)
 点列とは配列
 区分数とは整数
 曲線配列とは配列
 tとは整数
 点列は座標列を『,』で区切る
 区分数はINT(SQRT((点列[6]-点列[0])^2+(点列[7]-点列[1])^2)/10)
 もし区分数<10ならば
  区分数は10
 もし区分数>最大区分数ならば
  区分数は最大区分数
 曲線配列に(0,点列[0],点列[2],点列[4],点列[6]から点位置計算)を配列追加
 曲線配列に(0,点列[1],点列[3],点列[5],点列[7]から点位置計算)を配列追加
 区分数の回
  tは回数/区分数
  曲線配列に(t,点列[0],点列[2],点列[4],点列[6]から点位置計算)を配列追加
  曲線配列に(t,点列[1],点列[3],点列[5],点列[7]から点位置計算)を配列追加
 曲線配列を『,』で配列結合で戻る

●点位置計算(t,P1,P2,P3,P4から)
 sとは整数
 sは1-t
 INT((s^3)*P1+3*(s^2)*t*P2+3*s*(t^2)*P3+(t^3)*P4)で戻る

/*曲線&ベジェゴン*ここまで*/


名前:
コメント:


タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2008年09月14日 22:53
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。