obj.interpolation

lua.txtの記述

obj.interpolation(time,x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3)
連続した点p0(x0,y0,z0),p1(x1,y1,z1),p2(x2,y2,z2),p3(x3,y3,z3)から時間time(0~1)に応じたp1,p2間の座標を計算します。
※y,z座標は省略することが出来ます。
例:x,y,z = obj.interpolation(time,x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3)
x,y = obj.interpolation(time,x0,y0,x1,y1,x2,y2,x3,y3)





解説

任意の2点の間を曲線的に補間します。
p1(x1,y1)とp2(x2,y2)の間が曲線で補間され、曲線の形はp0(x0,y0)とp3(x3,y3)の座標によって決まります。
timeはゼロのときはp1(x1,y1)、1のときはp2(x2,y2)の座標となります。


曲線上に点を描画する例

アンカーポイントを使って、曲線を調整するスクリプト例です。
p0やp3を調整すると曲線の形が変化することが分かると思います。
obj.interpolation01.png

@補間テスト
--dialog:座標,pos={-100,-100,100,-100,100,100,-100,100};

--4点の座標を定義
obj.setanchor("pos",4,"line")
x0=pos[1];y0=pos[2];
x1=pos[3];y1=pos[4];
x2=pos[5];y2=pos[6];
x3=pos[7];y3=pos[8];

--4点の描画(黄)
obj.load("figure","円",0xffff00,30)
obj.draw(x0,y0)
obj.draw(x1,y1)
obj.draw(x2,y2)
obj.draw(x3,y3)

--補間曲線の描画(青)
obj.load("figure","円",0x0000ff,10)
n=20
for i=0,n do
  xx,yy = obj.interpolation(1/n*i,x0,y0,x1,y1,x2,y2,x3,y3)
  obj.draw(xx,yy)
end

--現在位置の描画(赤)
obj.load("figure","円",0xff0000,20)
t=obj.time/obj.totaltime
x,y = obj.interpolation(t,x0,y0,x1,y1,x2,y2,x3,y3)
obj.draw(x,y)


連続した曲線を描画する例

アンカーポイントを使って、連続した曲線を描画するスクリプト例です。

@補間テスト-連続した曲線の描画
--dialog:座標,pos={-100,-100,100,-100,100,100,-100,100};

--4点の座標を定義
obj.setanchor("pos", 4, "line")

--補間曲線の描画(青)
obj.load("figure", "円", 0x0000ff, 10)

n=20
for j=1, #pos/2 do
    for i = 0, n do
      xx, yy = obj.interpolation(1/n*i, unpack(pos))
      obj.draw(xx, yy)
    end

    --先頭の2要素を配列末尾にコピー
    table.insert(pos, pos[1])
    table.insert(pos, pos[2])
    --先頭の2要素を削除
    table.remove(pos, 1)
    table.remove(pos, 1)
end


  • 最終更新:2011-12-28 00:53:52

このWIKIを編集するにはパスワード入力が必要です

認証パスワード