Итак, я написал следующую функцию, чтобы взять фрейм и функцию полярной координаты и отобразить ее, генерируя декартовы координаты в этом фрейме.Вот код.
func cartesianCoordsForPolarFunc(frame: CGRect, thetaCoefficient:Double, cosScalar:Double, iPrecision:Double, largestScalar:Double) -> Array<CGPoint> {
// Frame: The frame in which to fit this curve.
// thetaCoefficient: The number to scale theta by in the cos.
// cosScalar: The number to multiply the cos by.
// largestScalar: Largest cosScalar used in this frame so that scaling is relative.
// iPrecision: The step for continuity. 0 < iPrecision <= 2.pi. Defaults to 0.1
// Clean inputs
var precision:Double = 0.1 // Default precision
if iPrecision != 0 {// Can't be 0.
precision = iPrecision
}
// This is ther polar function
// var theta: Double = 0 // 0 <= theta <= 2pi
// let r = cosScalar * cos(thetaCoefficient * theta)
var points:Array<CGPoint> = [] // We store the points here
for theta in stride(from: 0, to: Double.pi * 2 , by: precision) { //TODO: Try to recreate continuity. WHY IS IT NOT 2PI
let x = cosScalar * cos(thetaCoefficient * theta) * cos(theta) // Convert to cartesian
let y = cosScalar * cos(thetaCoefficient * theta) * sin(theta) // Convert to cartesian
// newvalue = (max'-min')/(max-min)*(value-max)+max'
let scaled_x = (Double(frame.width) - 0)/(largestScalar*2)*(x-largestScalar)+Double(frame.width) // Scale to the frame
let scaled_y = (Double(frame.height) - 0)/(largestScalar*2)*(y-largestScalar)+Double(frame.height) // Scale to the frame
points.append(CGPoint(x: scaled_x, y:scaled_y)) // Add the result
}
print("Done points")
return points
}
Я передаю полярную функцию r = 100*cos(9/4*theta)
, которая выглядит следующим образом. ![Graph of the polar function](https://i.stack.imgur.com/Egqov.png)
Мне интересно, почему мойФункция возвращает следующее, когда тета переходит от 0 до 2. (Обратите внимание, что я на этом рисунке рисую цветы разных размеров, следовательно, повторение рисунка) ![Partial graph of the function](https://i.stack.imgur.com/P1UIJ.png)
Как видите, это неправильно.Странно то, что, когда тета переходит от 0 до 2Pi * 100 (также работает для других случайных значений, таких как 2Pi * 4, 2Pi * 20, но не для 2Pi * 2 или 2Pi * 10), это работает, и я получаю это. ![Correct graph](https://i.stack.imgur.com/MQELC.png)
Почему это?Домен не от 0 до 2Pi?Я заметил, что при переходе к 2Pi * 100 он перерисовывает некоторые лепестки, так что есть предел, но что это?
PS: Точность здесь составляет 0,01 (достаточно, чтобы действовать как непрерывная).На моих изображениях я рисую функцию в разных размерах и внахлест (на последнем изображении 2 внутренних цветка).