Shear (日本語)

この関数は wayサイコロ転がしデモより借用されました。 グラフィックスの剪断は (別名は"斜行") 座標変換を実行します (以降の全ての描画に影響します)。剪断前に love.graphics.push を実行することが推奨されています。

function shear(ox, oy, xx, xy, yx, yy)
	local atan2, acos, tan = math.atan2, math.acos, math.tan
	local ex, ey, fx,fy = xx-ox, xy-oy, yx-ox, yy-oy
	if ex*fy<ey*fx then ex,ey,fx,fy=fx,fy,ex,ey end
	local e,f = (ex*ex+ey*ey)^.5, (fx*fx+fy*fy)^.5
	ex,ey = ex/e, ey/e
	fx,fy = fx/f, fy/f
	local desiredOrientation=atan2(ey+fy,ex+fx)
	local desiredAngle=acos(ex*fx+ey*fy)/2
	local z=tan(desiredAngle)
	local distortion=((1+z*z)/2)^.5
	love.graphics.translate(ox, oy)
	love.graphics.rotate(desiredOrientation)
	love.graphics.scale(1, z)
	love.graphics.rotate(-pi/4)
	love.graphics.scale(e/distortion,f/distortion)
end


LÖVE 0.8.0 から利用可能

このコードは LÖVE version 0.8.0 で廃止されました。

場面全体の剪断/斜行を行うために love.graphics.shear を、または描画可能な単一物の剪断/斜行を行うために love.graphics.draw にて剪断 (shear) 引数を使用することができます。


そのほかの言語