gpt4 book ai didi

java - if语句困惑

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:59 25 4
gpt4 key购买 nike

下面是我的代码。我试图使中心球体绕其轨道旋转一部分,然后当它撞击其轨道上的点 (-orbitRadius, 0) 时,它只是向左移动。我使用了 if 语句,但它不能正常工作。问题是我需要以某种方式编写代码,以便一旦调用 if 语句,就使用 if 循环中的版本而不是原始公式来计算坐标。它仅按原样对一帧执行此操作。有人可以帮忙吗?

<小时/>
import java.util.*;
import java.awt.*;

public class Spiral
{

public static void main(String[] args)
{

int rcircle = 200;

int radius = 0;

escape(rcircle, radius);
}


public static void escape (int rcircle, int radius)
{
StdDraw.setCanvasSize(600, 400);
StdDraw.setXscale(0, 600);
StdDraw.setYscale(0, 400);

double xprof;
double yprof;

long T0 = System.currentTimeMillis();
final int FRAME_TIME = 50;


for (int t = 0; t<= 1000; t++) { // note: Prof. Yang starts in his optimal position
double x = (Math.cos(Math.toRadians(0+(3)*4)*t)*rcircle/12 + 300);
double y = (Math.sin(Math.toRadians(0+(3)*4)*t)*rcircle/12 + 200);

if (y == 0) {
x = (300 - rcircle/12) - 12*t;
y = 0;
}

StdDraw.circle(x, y, 10);

xprof = (Math.cos(Math.toRadians(0+4*t))*rcircle + 300);
yprof = (Math.sin(Math.toRadians(0+4*t))*rcircle + 200);

StdDraw.filledCircle(xprof, yprof, 10);
StdDraw.show(FRAME_TIME);
StdDraw.clear();
}
}
}

最佳答案

您有很多问题:

  1. y 上添加了 200 的偏移量,因此 y 永远不会为零

  2. 很可能会出现一些舍入误差,因此检查到 200 也好不了多少。尝试这样的事情:

    if (Math.abs(y-200) < 0.0001)

  3. 您的代码不会使球体继续向左移动,因为 y 将在下次循环时重新计算。一旦

  4. 球体从 (orbitRadius, 200) 开始,因此如果您固定点 3,球体将向左移动(因为 y == 200)

这是修复了 1-3 的解决方案:

import java.util.*;
import java.awt.*;

public class Spiral
{

public static void main(String[] args)
{

int rcircle = 200;

int radius = 0;

escape(rcircle, radius);
}


public static void escape (int rcircle, int radius)
{
StdDraw.setCanvasSize(600, 400);
StdDraw.setXscale(0, 600);
StdDraw.setYscale(0, 400);

double xprof;
double yprof;

long T0 = System.currentTimeMillis();
final int FRAME_TIME = 50;

double y = 0;

for (int t = 0; t<= 1000; t++) { // note: Prof. Yang starts in his optimal position
double x = (Math.cos(Math.toRadians(0+(3)*4)*t)*rcircle/12 + 300);

if (Math.abs(y-200) < 0.0001) {
x = (300 - rcircle/12) - 12*t;
y = 200;
} else {
y = (Math.sin(Math.toRadians(0+(3)*4)*t)*rcircle/12 + 200);
}

StdDraw.circle(x, y, 10);

xprof = (Math.cos(Math.toRadians(0+4*t))*rcircle + 300);
yprof = (Math.sin(Math.toRadians(0+4*t))*rcircle + 200);

StdDraw.filledCircle(xprof, yprof, 10);
StdDraw.show(FRAME_TIME);
StdDraw.clear();
}
}
}

关于java - if语句困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21965387/

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