Как «вращать» эллипс? - PullRequest
       12

Как «вращать» эллипс?

0 голосов
/ 31 октября 2018

Используя это:

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.ellipse и love.graphics.rotate, но есть ли способ получить координаты точек на вращающемся эллипсе?

1 Ответ

0 голосов
/ 01 ноября 2018

Это проблема тригонометрии, вот как работает базовое вращение 2D. Представьте себе точку, расположенную в (x, y). Если вы хотите повернуть эту точку вокруг начала координат (в вашем случае 0,0) на угол θ, координаты новой точки будут расположены в точке (x1, y1) с помощью следующего преобразования

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) -- 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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...