C++: Вращение вектора вокруг определенного момента

Подпись типа достаточна

Поскольку подпись уже ограничивает тип, вы можете удалить часть :: a в теле функции:

getMaxBound :: Bounded a => a -> a
getMaxBound _ = maxBound

Подпись типа указывает этот тип вход функции совпадает с типом выхода функции.

Например:

Prelude> getMaxBound (3 :: Int)
9223372036854775807
Prelude> getMaxBound 'c'
'\1114111'
Prelude> getMaxBound True
True
Prelude> getMaxBound LT
GT

Использование расширения ScopedTypeVariables

Мы также можем использовать ScopedTypeVariables расширение [Haskell-wiki] , а затем реализовать его со ссылкой на переменную типа a:

{-# LANGUAGE ScopedTypeVariables #-}

getMaxBound :: forall a . Bounded a => a -> a
getMaxBound _ = maxBound :: a
15
задан ROMANIA_engineer 1 February 2015 в 18:43
поделиться

4 ответа

Поскольку Mehrdad Afshari прокомментировал сообщение Песто, включая перевод назад в исходную координату, которой будет система:

x_rotated = ((x - x_origin) * cos(angle)) - ((y_origin - y) * sin(angle)) + x_origin
y_rotated = ((y_origin - y) * cos(angle)) - ((x - x_origin) * sin(angle)) + y_origin
27
ответ дан 1 December 2019 в 00:45
поделиться

Принятие Вы используете стандартную векторную реализацию, где (0,0) был бы верхний левый угол и Вы вращаетесь вокруг точки (x_origin, y_origin), это должно сделать это:

x = ((x - x_origin) * cos(angle)) - ((y_origin - y) * sin(angle))
y = ((y_origin - y) * cos(angle)) - ((x - x_origin) * sin(angle))

Примечание, что y's y_origin - y, потому что y повышения стоимости, как Вы спускаетесь.

3
ответ дан 1 December 2019 в 00:45
поделиться

Необходимо будет использовать , матрица перевода для перемещения вращается о другой точке.

1
ответ дан 1 December 2019 в 00:45
поделиться

Решение состоит в том, чтобы перевести вектор в систему координат, в которой центр вращения (0,0). Примените матрицу вращения и переведите вектор назад в систему исходной координаты.

dx = x of rotation center  
dy = y of rotation center

V2 = V - [dx, dy, 0]  
V3 = V2 * rotation matrix  
Result = V3 + [dx, dy, 0]
11
ответ дан 1 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: