因此,我从 Scratch 中的 PvZ 项目中休息一下,并尝试看看我可以在 Scratch 中做什么。所以事情是这样的:我有点想看看我是否可以制作一个从 sin(x°) 到 sin(xradians) 的转换器,这应该不会太难,除了下面的东西:sin(x 弧度)是 sin(πx°/180)
现在问题就出现了,因为这是 π 的表示:
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
tex2jax: {inlineMath: [["$","$"]]},
CommonHTML: {
scale: 120
}
});
</script>
<script type="text/javascript" async src=
"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=
TeX-MML-AM_CHTML"></script>
$\sum_{k=0}^\infty\dfrac{50k-6}{2^k\binom{3k}k}$
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
tex2jax: {inlineMath: [["$","$"]]},
CommonHTML: {
scale: 120
}
});
</script>
<script type="text/javascript" async src=
"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=
TeX-MML-AM_CHTML"></script>
$\sum_{k=0}^\infty\dfrac{k!(2k)!(50k-6)}{2^k(3k)!}$
[scratchblocks]
define pow(base)(power)
set [result v] to [1]
set [base v] to (base)
set [power v] to (round (power))
set [done v] to [0]
if <(power) < [0]> then
set [base v] to [((1) / (base))]
set [power v] to [-1(() *(round (power))]
end
repeat until <[done v] = [1]>
if <(([power v]) mod (2)) = [0]> then
set [result v] to (([result v]) * ([base v]))
change [power v] by (-1)
end
if <(([power v]) mod (2)) > [0]> then
set [done v] to [1]
end
if <<not <<[done v] = [1]>>>
set [base v] to (([base v]) * ([base v]))
set [power v] to (([power v]) / (2))
end
end
[/scratchblocks]
即使这样,如果我想写求和,我也必须单独写幂,老实说,在我看来这非常烦人。事实上,如果您确实想看看它是如何写出来的,这里
为了避免人们生气并说它很难找到,一种快速找到它的方法是点击“Buy 10 (cursorSprite1”) 精灵(这甚至不是错字,这实际上是如何输入精灵名称)
事实上,我能想到的唯一方法就是尝试写出这个结果,就像写出求和一样:看起来很简单,但必须非常复杂才能以简单的方式工作。必须有很多变量/消息同时发出,这会导致很大的滞后。而且我什至不需要那么高的精度(只需要从 k=0 到 13 的总和),所以看起来它只是试图让阶乘发挥作用,这是一个诚实的痛苦。
我的问题
首先,当您在应用程序中需要 π 时(如您的情况,在度数和半径之间进行转换),您不会计算
π。 相反,您只需定义一个具有硬编码值 3.141592653589793 的常量。 这具有三个重要优点:性能:硬编码 π 比计算 π 高效得多。
arctan
如果您坚持仅使用非常基本的数学运算进行计算, 这篇 wiki 文章建议使用 Leibniz 公式
:https://en.scratch-wiki.info/wiki/Calculated_Pi
当然,编写自己的计算是完全有意义的,但只是出于数学好奇心或作为编码练习。
请记住n!当 n 大于 170 时将会溢出。 因此,这将溢出 k > 56:
然而这需要更长的时间才能溢出。
您甚至可以将其与 2 的幂结合起来。
伪代码:
denominator = 1
a = 6 * k
b = k
do k times
denominator = denominator * (a / b)
a = a - 2
b = b - 1
这是在 Scratch 中计算阶乘的一种方法。
这可以很容易地在 Scratch 中复制。我不知道 [scratchblocks] 的语法,但我在下面有一个项目链接。我希望这有帮助!
草稿块格式:
[scratchblocks]
when green flag clicked
ask [enter value for n] and wait
return=(answer)!
say (join (join (answer) [!=]) (return))
stop [all v]
[/scratchblocks]
[scratchblocks]
define return=(n)!
set [index v] to (n)
set [return v] to [1]
repeat ((n))
set [return v] to (([return]) * ([index]))
change [index v] by (-1)
end
[/scratchblocks]
https://scratch.mit.edu/projects/939563834/