TLDR; Переместить расчет для y
в одну строку:
var y = (13 * Math.cos(index * angle.toDouble())) - (5 * Math.cos(2 * index * angle.toDouble())) - (2 * Math.cos(3 * index * angle.toDouble())) - (Math.cos(4 * index * angle.toDouble()))
Более подробное объяснение:
Это интересновопрос, особенно касательно котлина.Быстрый (популярное имя поисковой системы здесь) поиск говорит мне, что формула, которую вы используете:
x(T)=16sin^3(T)
y(T)=13cos(T)−5cos(2T)−2cos(3T)−cos(4T)
Глядя на ваш код, все выглядит хорошо ... за исключением 3 вычислений для y
, каждый на новой строке, и это виновник вашего «вопроса», потому что каждый из них рассматривается отдельно, а не частью y
вычисления.
Это можно увидеть в форме сердца:
val y = (13 * Math.cos(angle)).toFloat()
val y = (13 * Math.cos(angle) - 5 * Math.cos(2 * angle)).toFloat()
val y = (13 * Math.cos(angle) - 5 * Math.cos(2 * angle) - 2 * Math.cos(3 * angle)).toFloat()
val y = (13 * Math.cos(angle) - 5 * Math.cos(2 * angle) - 2 * Math.cos(3 * angle) - Math.cos(4 * angle)).toFloat()
Посмотрите на эти (Kotlin):
var sum = 10 + 10
println("sum=$sum") // prints sum=20
sum = 10 + 10
+ 10
println("sum=$sum") // also prints sum=20 (!)
Напротив, в Java,это правда:
int sum = 10 + 10;
System.out.println("sum=" + sum); // prints sum=20
sum = 10 + 10
+10;
System.out.println("sum=" + sum); // prints sum=30 (!), as expected
sum = 10 + 10;
+10; // doesn't compile
Компилятор жалуется, что это "Не утверждение"
В отдельном примечании есть несколько улучшений, которые вы могли быделать в вашем коде (например, извлекать дубликаты в переменную и т. д.)