gpt4 book ai didi

java - 在海龟程序中画一个圆

转载 作者:行者123 更新时间:2023-11-30 07:08:27 28 4
gpt4 key购买 nike

我目前正在开发一个处理(如语言中的)草图,它由 Turtle 逻辑驱动(请参阅 https://en.wikipedia.org/wiki/Turtle_graphics )。这意味着我从当前坐标到提供的坐标绘制一条线。然后,所提供的坐标将成为新的当前坐标。我想近似一个圆,并使用三角函数编写了一段简单的代码。代码如下:

void drawCircle(int radius){
// The circle center is radius amount to the left of the current xpos
int steps = 16;
double step = TWO_PI /steps;

for(double theta = step; theta <= TWO_PI; theta += step){
float deltaX = cos((float)theta) - cos((float)(theta - step));
float deltaY = sin((float)theta) - sin((float)(theta - step));

moveXY(deltaX*radius, deltaY*radius);
}

}

程序逻辑很简单。它将使用变量 theta 循环遍历圆中的所有弧度。步骤的数量将指示每个theta block 有多大。然后,它将计算由 theta 控制的圆中特定点的 x、y 值。然后,它将扣除上一个周期的 x,y 值(因此是theta-step),以获得为达到所需的 x,y 位置而必须从该位置移动的量。它最终会将这些增量值提供给 moveXY 函数,该函数从当前点到提供的值绘制一条线,并使它们成为新的当前位置。

当使用有限数量的步骤时,该程序似乎运行得很好。然而,当步数增加时,圆圈变得越来越像斐波那契螺旋。我的猜测是,这是由于 float 以及正弦和余弦计算不精确,并且每次迭代都会累加。

我是不是理解错了什么?我希望最终将此代码移植到 Javascript,因此我正在设计中寻找解决方案。使用 BigDecimal 可能不起作用,特别是因为它不包含自己的余弦和正弦函数。我提供了一些图片来详细说明该问题。非常感谢任何帮助!

步数 16: Step count 16

步数 32: Step count 32

步数 64: Step count 64

步数 128: Step count 128

最佳答案

浮点和正弦/余弦应该足够精确。问题是:你在飞机上的位置有多精确?如果该位置以像素为单位测量,则每个浮点值在每个步骤后都会四舍五入为整数。精度损失就会增加。

关于java - 在海龟程序中画一个圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39636917/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com