如何“旋转”一个椭圆?

使用以下代码:

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)和边缘连接起来。如何以参数 R“旋转”椭圆,使其围绕中心旋转?我知道你可以通过love.graphics.ellipselove.graphics.rotate来进行旋转,但有没有办法获得旋转后椭圆上点的坐标?

点赞
用户5525442
用户5525442

这是一个三角函数问题,以下是基本的 2D 旋转的方法。想象一个点位于 (x,y)。如果你想将这个点围绕原点(在这个例子中是 0,0)旋转一个角度 θ,则新点的坐标将通过以下变换得到:

x1 = x_cosθ - y_sinθ

y1 = y_cosθ + x_sinθ

在你的例子中,我添加了一个新的椭圆形,经过旋转。

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) -- 红色
        love.graphics.line(0, 0, x, y)
    end

  -- 旋转 r = 90 度
    local r = math.rad(90)
    for i = 1, 360, 5 do
        local I  = math.rad(i)
        -- 原始坐标
        local x  = math.cos(I) * W
        local y  = math.sin(I) * H
        -- 变换坐标
        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) -- 蓝色
        love.graphics.line(0, 0, x1, y1)
    end
end

enter image description here

2018-11-01 08:00:22