почему угол не является регулярным - PullRequest
0 голосов
/ 07 октября 2019

У меня математическая проблема. Я работаю над танком в андроид-студиях и хочу рассчитать траекторию выстрела. для этого я реализую небольшое приложение, в котором я беру каждого ангела от 0 до 360, чтобы посмотреть, в какую директорию попадает снимок. поэтому я прохожу 360 углов и размещаю каждый из них с одинаковой начальной скоростью и в то же время и добавляю texview с углом в качестве содержимого на макете с вычисленными x и y Posistion. я ожидал, что круг от 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-Position

  • SX-direction = power · cos (угол) · i
  • SY-direction = power · sin (угол)· I + 0,5 · -g · i2

результат должен быть кругом, состоящим из чисел, которые пошли от 0 до 360, но nubers совершенно случайны, почему?

1 Ответ

1 голос
/ 07 октября 2019

Математические функции всегда работают в радианах, а не в градусах. Это означает, что вам нужно конвертировать ваши углы перед вызовом Math.cos и Math.sin:

Math.cos(angle / 180 * Math.PI)
Math.sin(angle / 180 * Math.PI)

Они выглядят случайным образом, потому что с 360 радианами, которые вы используете в настоящее время, вы сделали около 60 кругов, и ваши числа чередуются наэти 60 вращений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...