Форум программистов, компьютерный форум CyberForum.ru

Как расчитать растояние на координатной плоскости напрямую? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Visual Studio C++. Вылетает ошибка при компиляции. Задание на матрицы http://www.cyberforum.ru/cpp-beginners/thread1022793.html
// dz325.11.13.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<iostream> using namespace std; int main() { cout<<"Vvedite razmer pervoi matrici:\n";
C++ Максимально значение одномерного массива С помощью функции осуществить поиск максимального элемента одномерного массива. Помогите, пожалуйста. Желательно код попроще, на Borland 3.1, но не принципиально, разберусь. http://www.cyberforum.ru/cpp-beginners/thread1022792.html
Using dynamic arrays, implement a polynomial class with polynomial addition, subtraction, and multiplication C++
Вот само задание: Using dynamic arrays, implement a polynomial class with polynomial addition, subtraction, and multiplication. Discussion: A variable in a polynomial does nothing but act as a placeholder for the coefficients. Hence, the only interesting thing about polynomials is the array of coefficients and the corresponding exponent. Think about the polynomial x^3+x+1, what is the...
C++ Коментарии к программе
Всем доброго дня. Не могли бы написать коментарии к готовой программе, буду очень благодарен: #include <cstring> #include <iostream> using namespace std; void center(const char* s1, char* s2, const int n1, const int n2) { int i = n1 + n2; int j = n2; while(j >= (n2 / 2))
C++ Подсчитать наибольшее количество идущих подряд пробелов в строке http://www.cyberforum.ru/cpp-beginners/thread1022752.html
Здраствуйте, помогите написать код к такой задаче: Дана строка символов S. а) Подсчитать наибольшее количество идущих подряд пробелов. б) Выяснить, верно ли, что в строке S имеются пять идущих подряд букв е.
C++ Тип string в консоли Вот такие вопросы: 1. как правильно объявить string 2. записать в string слова и цифры с точками 3. передать и выполнить команду в cmd (хотябы net send с данными из string) Особенно хотелось бы разобраться с пунктом "3" подробнее

Показать сообщение отдельно
Ullaluna
 Аватар для Ullaluna
8 / 6 / 1
Регистрация: 11.11.2013
Сообщений: 75
29.11.2013, 16:59     Как расчитать растояние на координатной плоскости напрямую?
Я бы решила задачу в общем виде.

Предполагаем, что направление юг-север совпадает с положительным направлением OY, а направление запад-восток - с положительным направлением OX. Также допустим, что инструкция не содержит указаний типа: "пять шагов в направлении норд-норд-вест".

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <cmath>
using namespace std;
 
int main() {
  //float xstart = 0, ystart = 0;
                                           //по смыслу задачи, начало пути находится в точке отсчета с координатами (0,0);
                                           //это не принципиально и легко поправимо
  float xfin, yfin, step, distance;
  int choice, trigger = 1;
  
  while (trigger) {
    cout << "Укажите координаты следующего шага: " << endl;
    cout << "Сколько шагов на восток? " << "\t"; cin >> xfin; //задаем значение х
    cout << "Сколько шагов на север?" << "\t"; cin >> yfin;   //задаем значение y
                                                                                             //Фактически, мы всякий раз записываем новые координаты
                                                                                             //как координаты конца пути. По условию, мы не должны "запомнить"
                                                                                             //весь путь, важны только начало и конец
    
    cout << "Узнать расстояние (1) или указать координаты следующего шага (2): " << endl;
    cin >> choice;
    switch(choice) {
      case 1: trigger = 0; break;
      case 2: trigger = 1; break;
      default: cout << "Отойди от компьютера, сухопутная крыса! " << endl;
    }
  }
  
  distance = sqrt(pow(xfin,2) + pow(yfin,2));  //известная формула из векторной алгебры :)
  cout << "" << distance << endl;
  
  return 0;
}
Код усложнится, если ввести направления на норд-ист, норд-норд-ист, и т.д. Я бы сделала опять функцию выбора направления, чтобы потом программно умножить на синус и косинус. Но для начала, сомневаюсь, что в учебном задании это необходимо.

Добавлено через 1 час 57 минут
Автор, поллундра! Вся задача решается на раз плюнуть, если кто с универа вспомнит полярные координаты:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <cmath>
using namespace std;
#define itsPi 3.1415
 
int main() {
  float  xpos, ypos, xfin = 0, yfin = 0;
  float  angle, distance;
  int stepcount, choice, trigger = 1;
  
  while (trigger) {
    cout << "Сколько шагов надо пройти?" << "\t";
    cin >> stepcount;
    
    cout << "В каком направлении? " << "\n";
    cout << "1.На север." << endl;
    cout << "2.На северо-запад." << endl;
    cout << "3.На восток." << endl;
    //И так далее...
    cin >> choice;
    switch(choice) {
      case 1: angle = itsPi/2; break;
      case 2: angle = 3*itsPi/4; break;
      case 3: angle = 0; break;
      //и так далее...
      default: cout << "Отойди от компьютера, сухопутная крыса! " << endl;
    }
    
    
    cout << "Узнать пройденное расстояние на данный момент (1)"
         << "ИЛИ задать координаты следующего шага (2)"
     << "ИЛИ указать расстояние и выйти из программы (3): "
     << endl;
    cin >> choice;
    switch(choice) {
      case 1:
    xpos = stepcount*cos(angle);
    ypos = stepcount*sin(angle);
    xfin+=xpos;
    yfin+=ypos;
    distance = sqrt(pow(xfin,2) + pow(yfin,2));
    cout << "x = " << xfin << endl;
    cout << "y = " << yfin << endl;
    cout << "Расстояние: " << distance << endl;
    break;
      case 2:
    xpos = stepcount*cos(angle);
    ypos = stepcount*sin(angle);
    xfin+=xpos;
    yfin+=ypos;
    break;
      case 3:
    xpos = stepcount*cos(angle);
    ypos = stepcount*sin(angle);
    xfin+=xpos;
    yfin+=ypos;
    distance = sqrt(pow(xfin,2) + pow(yfin,2));
    cout << "Расстояние: " << distance << endl;
    trigger = 0;
    break;
      default:
    cout << "Последний раз предупреждаю, лопни моя селезенка! " << endl;
    } 
  }
  
  return 0;
}
Примерно так, плюс-минус добавить табличные данные и привести код в годный вид.

И вот тут тебе вся роза ветров для поиска сокровищ, а твой гипотетический пользователь не парится с незнакомой ему математикой. Чтобы результат выводился с точностью до третьего знака, есть какая-то функция. Помню, в 45-м году во время штурма Берлина что-то такое читала в самоучителе. С тех пор не использовала и забыла.
 
Текущее время: 10:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru