Я пишу Kotlin функцию класса Java Graphics
, которая заполнит равносторонний треугольник с центром в заданных координатах. Я сейчас пытаюсь добавить функциональность, чтобы повернуть треугольник theta
в градусах.
Читая в повороте точки, я нашел уравнения x′ = xcosθ − ysinθ
и y′ = ycosθ + xsinθ
, которые в дополнение к переводу x
и y
в начало координат до поворота и затем к переводу результата обратно, похоже, решение, которое я ищу.
Однако при реализации оказывается, что треугольник почти вращается в моделируемом трехмерном пространстве.
Мой код
fun Graphics.fillTriangle(x: Int, y: Int, sideLength: Int, theta: Int = 0) {
var xCords = arrayOf(x - (sideLength / 2),
x + (sideLength / 2),
x)
var yCords = arrayOf((y + (sideLength / (2 * sqrt(3.0)))).toInt(),
(y + (sideLength / (2 * sqrt(3.0)))).toInt(),
(y - (sideLength / sqrt(3.0))).toInt())
if(theta != 0) {
for(i in 0..2) {
xCords[i] = ((xCords[i]-x) * cos(toRadians(theta)) - (yCords[i]-y) * sin(toRadians(theta))).toInt() + x
yCords[i] = ((yCords[i]-y) * cos(toRadians(theta)) + (xCords[i]-x) * sin(toRadians(theta))).toInt() + y
}
}
fillPolygon(xCords.toIntArray(), yCords.toIntArray(), 3)
}
Что-то не так с моей реализацией?