如何写一个心脏方程式
How to write a heart equation
我正在尝试将 100 百个粒子放置在一个心形中。
粒子是圆圈,在窗格中有 x 和 y 位置。
for (p in ps) {
val index = ps.indexOf(p).toDouble()
var x = 16 * Math.pow(Math.sin(index * angle.toDouble()), 3.0)
//var y = Math.sqrt(Math.cos(index)) * Math.cos(400 * index) + Math.sqrt(Math.abs(index) - 0.4) * Math.pow((4 - index * index), 0.1)
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()))
p.layoutX = startX + x
p.layoutY = startY + y
}
p = 粒子
ps = 粒子(列表)
我不知道我在执行方程式时做错了什么。
我还尝试在 cos, sin 中使用 Math.toRadians,因为我读到他们需要它才能工作。
val index = -ps.size + ps.indexOf(p).toDouble()
val angle = 360 / ps.size
var i = index * angle
var x = 16 * Math.pow(Math.sin(Math.toRadians(i)), 3.0)
var y = 13 * Math.cos(Math.toRadians(i)) -
(5 * Math.cos(Math.toRadians(2 * i)))
-(2 * Math.cos(Math.toRadians(3 * i)))
-(Math.cos(Math.toRadians(4 * i)))
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()))
更长的解释:
这是一个有趣的问题,尤其是关于 Kotlin。快速(此处为热门搜索引擎名称)搜索告诉我您使用的公式是:
x(T)=16sin^3(T)
y(T)=13cos(T)−5cos(2T)−2cos(3T)−cos(4T)
看看你的代码,一切似乎都很好......除了 y
的 3 次计算,每一次都在新的一行,这是你的 "issue" 的罪魁祸首,因为它们每个都单独处理,不属于 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
编译器抱怨这是"Not a statement"
另外,您可以对代码进行一些改进(例如,将重复项提取到变量中等)
我正在尝试将 100 百个粒子放置在一个心形中。 粒子是圆圈,在窗格中有 x 和 y 位置。
for (p in ps) {
val index = ps.indexOf(p).toDouble()
var x = 16 * Math.pow(Math.sin(index * angle.toDouble()), 3.0)
//var y = Math.sqrt(Math.cos(index)) * Math.cos(400 * index) + Math.sqrt(Math.abs(index) - 0.4) * Math.pow((4 - index * index), 0.1)
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()))
p.layoutX = startX + x
p.layoutY = startY + y
}
p = 粒子
ps = 粒子(列表)
我不知道我在执行方程式时做错了什么。 我还尝试在 cos, sin 中使用 Math.toRadians,因为我读到他们需要它才能工作。
val index = -ps.size + ps.indexOf(p).toDouble()
val angle = 360 / ps.size
var i = index * angle
var x = 16 * Math.pow(Math.sin(Math.toRadians(i)), 3.0)
var y = 13 * Math.cos(Math.toRadians(i)) -
(5 * Math.cos(Math.toRadians(2 * i)))
-(2 * Math.cos(Math.toRadians(3 * i)))
-(Math.cos(Math.toRadians(4 * i)))
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()))
更长的解释:
这是一个有趣的问题,尤其是关于 Kotlin。快速(此处为热门搜索引擎名称)搜索告诉我您使用的公式是:
x(T)=16sin^3(T)
y(T)=13cos(T)−5cos(2T)−2cos(3T)−cos(4T)
看看你的代码,一切似乎都很好......除了 y
的 3 次计算,每一次都在新的一行,这是你的 "issue" 的罪魁祸首,因为它们每个都单独处理,不属于 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
编译器抱怨这是"Not a statement"
另外,您可以对代码进行一些改进(例如,将重复项提取到变量中等)