一边慢慢学习JavaScript,一边想用Three.JS制作动画: https://www.reddit.com/r/gifs/comments/ag6or3/send_this_to_your_loved_ones_for_valentines/
我试图重新创建该方程式,但是遇到了麻烦,因为下面的代码无法产生正确的结果。我已经读到JS在浮点数方面存在一些大问题,尤其是立方根实际上并不能很好地发挥作用。
const displayOptions = displayDevice =>
Object.entries(displayDevice)
.reduce((acc, [key, val]) => (val && acc.push(key), acc),[]);
这对您的JS大师来说合适吗?
这是我的代码实现,试图使它起作用,包括下面提到的修复程序。 https://codesandbox.io/s/vjm4xox185
答案 0 :(得分:0)
查看链接到的图形的范围。在post_type
范围内绘制心脏,但您的循环来自x: [-2, 2]
。这意味着您可能会获得除x: [-100, 100]
以外的所有x值的不确定结果。尝试缩小-1, 0, 1
循环的范围,您将获得所需的结果。
答案 1 :(得分:0)
问题是(Math.pow(3.0 - (x*x), 0.5))
的计算结果返回NAN
,好像不是现实数字
阅读here,以获取有关Math.pow(negativeNumber, 0.5)
的更多信息
因此我添加了validPow
来验证x是正数还是负数,并返回正确的结果。
for (var x = -100; x < 100; x++)
{
y = (Math.pow(x, 2/3) + 0.9) * (validPow(3.0 - (x*x), 0.5)) *
Math.sin(10 * Math.PI * x)
console.log(y)
}
function validPow(x, y)
{
var result = Math.pow(x, y);
if (x > 0)
{
return result;
}
else
{
return -1 * Math.pow(-x, y);
}
}
答案 2 :(得分:0)
最后解决了这个问题。
归结为这一行,关键是在第一个Math.pow语句中使用Math.abs(x):
var y = Math.pow(Math.abs(x), 0.66) + (0.9 * Math.sqrt(3.3 - x * x)) * Math.sin(10 * Math.PI * x);
感谢所有提供输入和帮助的人!
您可以在此处查看最终结果: https://codesandbox.io/s/vjm4xox185