我在数学上有问题。我正在Android Studio的坦克游戏中工作,想计算射击的轨迹。为此,我实现了一个小应用程序,在该应用程序中,我尝试从0到360的每个天使查看镜头所在的目录。所以我遍历了360个角度,并以相同的开始速度并同时放置了每个角度,并使用计算出的x和y Posistion在该布局中添加了一个角度为texview的内容。我期望一个从1到360的圆。但是角度不是规则的。这是代码
public class MainActivity extends AppCompatActivity {
private RelativeLayout layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
layout = findViewById(R.id.layout);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
shot( );
}
public void shot() {
for(int winkel = 0;angle<360;winkel++) {
TextView textView = new TextView(this);
textView.setText(""+angle);
textView.setTextSize(10);
int i = 10;
int power = 50;
System.out.println(angle);
textView.setX((float) (500+(power * Math.cos(angle) * i)));
textView.setY(((float) (0-((power * Math.sin(angle) * i) - (0.5 * 9.81 * Math.pow(i, 2))))));
//System.out.println((float) ((((power * Math.sin(angle) * i) - (0.5 * 9.81 * Math.pow(i, 2))))));
layout.addView(textView);
}
}
}
力量代表开始速度,我代表我停止射击的时间。这是计算x / y位置的两个公式
输出应该是一个由从0到360的数字组成的圆,但是小数是完全随机的为什么?
数学函数始终以弧度而不是度数工作。这意味着您必须在调用Math.cos
和Math.sin
之前转换角度:
Math.cos(angle / 180 * Math.PI)
Math.sin(angle / 180 * Math.PI)
它们看起来很随意,因为您当前正在使用360弧度,您已经绕了60圈,并且数字在这60圈中交错。