如何"rotate"一个椭圆?
How to "rotate" an ellipse?
使用这个:
local W, H = 100, 50
function love.draw()
love.graphics.translate(love.graphics.getWidth()/2,love.graphics.getHeight()/2)
for i = 1, 360 do
local I = math.rad(i)
local x,y = math.cos(I)*W, math.sin(I)*H
love.graphics.line(0, 0, x, y)
end
end
我可以用椭圆的中心(长度 W
和高度 H
)和边连接一条线。你如何'rotate'围绕它的中心的椭圆,参数R
?我知道你可以用 love.graphics.ellipse
和 love.graphics.rotate
来做,但是有什么方法可以得到旋转椭圆上的点的坐标吗?
这是一个三角函数问题,这是基本的二维旋转的工作原理。想象一个位于 (x,y) 的点。如果您想将该点围绕原点(在您的情况下为 0,0)旋转角度 θ,则通过使用以下变换
,新点的坐标将位于 (x1,y1)
x1 = xcosθ − ysinθ
y1 = ycosθ + xsinθ
在你的例子中,我在旋转后添加了一个新的椭圆
function love.draw()
love.graphics.translate(love.graphics.getWidth()/2,love.graphics.getHeight()/2)
for i = 1, 360, 5 do
local I = math.rad(i)
local x,y = math.cos(I)*W, math.sin(I)*H
love.graphics.setColor(0xff, 0, 0) -- red
love.graphics.line(0, 0, x, y)
end
-- rotate by angle r = 90 degree
local r = math.rad(90)
for i = 1, 360, 5 do
local I = math.rad(i)
-- original coordinates
local x = math.cos(I) * W
local y = math.sin(I) * H
-- transform coordinates
local x1 = x * math.cos(r) - y * math.sin(r)
local y1 = y * math.cos(r) + x * math.sin(r)
love.graphics.setColor(0, 0, 0xff) -- blue
love.graphics.line(0, 0, x1, y1)
end
end
使用这个:
local W, H = 100, 50
function love.draw()
love.graphics.translate(love.graphics.getWidth()/2,love.graphics.getHeight()/2)
for i = 1, 360 do
local I = math.rad(i)
local x,y = math.cos(I)*W, math.sin(I)*H
love.graphics.line(0, 0, x, y)
end
end
我可以用椭圆的中心(长度 W
和高度 H
)和边连接一条线。你如何'rotate'围绕它的中心的椭圆,参数R
?我知道你可以用 love.graphics.ellipse
和 love.graphics.rotate
来做,但是有什么方法可以得到旋转椭圆上的点的坐标吗?
这是一个三角函数问题,这是基本的二维旋转的工作原理。想象一个位于 (x,y) 的点。如果您想将该点围绕原点(在您的情况下为 0,0)旋转角度 θ,则通过使用以下变换
,新点的坐标将位于 (x1,y1)x1 = xcosθ − ysinθ
y1 = ycosθ + xsinθ
在你的例子中,我在旋转后添加了一个新的椭圆
function love.draw()
love.graphics.translate(love.graphics.getWidth()/2,love.graphics.getHeight()/2)
for i = 1, 360, 5 do
local I = math.rad(i)
local x,y = math.cos(I)*W, math.sin(I)*H
love.graphics.setColor(0xff, 0, 0) -- red
love.graphics.line(0, 0, x, y)
end
-- rotate by angle r = 90 degree
local r = math.rad(90)
for i = 1, 360, 5 do
local I = math.rad(i)
-- original coordinates
local x = math.cos(I) * W
local y = math.sin(I) * H
-- transform coordinates
local x1 = x * math.cos(r) - y * math.sin(r)
local y1 = y * math.cos(r) + x * math.sin(r)
love.graphics.setColor(0, 0, 0xff) -- blue
love.graphics.line(0, 0, x1, y1)
end
end