Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
13_Tigers
0 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 3
1

Движение точки

18.05.2010, 11:08. Просмотров 3381. Ответов 5
Метки нет (Все метки)

Очень нужна помощь с таким заданием:

написать движение точки по ломанному пути( туда и обратно )

на входе: массив точек - узлы ломанного пути и скорость точки( пиксел в секунду )

точка должна пройти все узлы и вернуться обратно в обратном порядке

рисовать не обязательно - главное чтоб можно было увидеть в коде "механику" движения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2010, 11:08
Ответы с готовыми решениями:

Движение точки по окружности
Как задать правильно? Создать класс, в котором реализованы следующие метод: ...

Движение точки по окружности
Подскажите, пожалуйста, формулу для расчета координат точки движущейся по...

Движение материальной точки
На плоскости заданы три точки . через какое время материальная точка,...

Движение точки в правильном n - угольнике
Суть такова, есть правильный n угольник, внутри него движется точка с...

Движение материальной точки в двумерном пространстве под действием постоянной силы
Реализуйте и протестируйте класс MovedPoint, описывающий положение и движение...

5
Maxim Prishchepa
Эксперт С++
1924 / 1036 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
18.05.2010, 11:23 2
Цитата Сообщение от 13_Tigers Посмотреть сообщение
Очень нужна помощь с таким заданием:

написать движение точки по ломанному пути( туда и обратно )

на входе: массив точек - узлы ломанного пути и скорость точки( пиксел в секунду )

точка должна пройти все узлы и вернуться обратно в обратном порядке

рисовать не обязательно - главное чтоб можно было увидеть в коде "механику" движения
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct point
{
   int x;
   int y;
};
void goForward(point *mas, const int size)
{
   for(int i=0;i<size-1; i++)
      cout<<"Point go from ("<<mas[i].X<<", "<<mas[i].Y<<") to ("<<mas[i +1].X<<", "<<mas[i +1].Y<<");\n";
}
void goBack(point *mas, const int size)
{
   for(int i=size-1; i>1;i--)
      cout<<"Point go from ("<<mas[i].X<<", "<<mas[i].Y<<") to ("<<mas[i -1].X<<", "<<mas[i -1].Y<<");\n";
}
Ну а дальше добавьте задержку в функцию и если требуется плавное перемещение - растчитывайте путь и выводите промежуточные значения
0
13_Tigers
0 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 3
21.05.2010, 05:29  [ТС] 3
Спасибо, а можно поподробнее про плавное перемещение?
0
xtorne21st
интересующийся
304 / 275 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
01.04.2013, 17:00 4
как вариант:
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <cmath>
 
struct Way
{
    float x; // x coordinate.
    float y; // y coordinate.
    int t; // delay.
};
 
class PointWay
{
public:
    PointWay();
    PointWay(float, float, int);
    ~PointWay() {}
    void add_point(float, float, int);
    void show_way();
 
private:
    std::vector<Way> points;
    float ix, iy;
 
    void set_sleep(int);
    float formula_length(std::vector<Way>::const_iterator);
    float get_xfactor(std::vector<Way>::const_iterator);
    float get_yfactor(std::vector<Way>::const_iterator);
    void show_point(std::vector<Way>::const_iterator);
};
 
PointWay::PointWay()
{
    std::clog << "You need initialize point.\n";
    exit(0);
}
 
PointWay::PointWay(float x, float y, int time)
{
    Way pt = { x, y, time };
    ix = x, iy = y;
    points.push_back(pt);
}
 
void PointWay::set_sleep(int t)
{
    clock_t start_count = clock();
    while (clock()/CLOCKS_PER_SEC - start_count/CLOCKS_PER_SEC < t)
        ;
}
 
float PointWay::formula_length(std::vector<Way>::const_iterator i)
{
    return sqrt( (ix - i->x) * (ix - i->x) +
                 (iy - i->y) * (iy - i->y) );
}
 
float PointWay::get_xfactor(std::vector<Way>::const_iterator i)
{
    if (i->x > ix)
    {
        return (i->x - ix) / formula_length(i);
    }
    else
    {
        return -((ix - i->x) / formula_length(i));
    }
}
 
float PointWay::get_yfactor(std::vector<Way>::const_iterator i)
{
    if (i->y > iy)
    {
        return (i->y - iy) / formula_length(i);
    }
    else
    {
        return -((iy - i->y) / formula_length(i));
    }
}
 
void PointWay::add_point(float x, float y, int time)
{
    Way addin = { x, y, time };
    points.push_back(addin);
}
 
void PointWay::show_point(std::vector<Way>::const_iterator it)
{
    float fact_x = get_xfactor(it);
    float fact_y = get_yfactor(it);
    for (int i = formula_length(it); i > 0; --i)
    {
        std::cout.precision(3);
        std::cout << "x: " << (ix += fact_x) << "\t y: " << (iy += fact_y) << '\n';
        set_sleep(it->t);
    }
}
 
void PointWay::show_way()
{
    std::vector<Way>::iterator the_point = points.begin();
    ++the_point; // set to the next position, couse first positioni is
    // initialize by constructor;
 
    // front move.
    for ( ; the_point != points.end(); ++the_point)
    {
        show_point(the_point);
        std::cout << '\n';
    }
 
    // move back.
    for ( --the_point; points.size() > 0; --the_point)
    {
        show_point(the_point);
        std::cout << '\n';
        points.erase(the_point);
        the_point = points.end();
    }
}
 
int main()
{
    PointWay obj(1, 1, 1);
    obj.add_point(-3, 5, 1);
    obj.show_way();
}
0
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
01.04.2013, 18:36 5
Ну вы загнули. Фиг разогнешь. Ларчик, между тем, открывается просто, через подобные треугольники.

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
#include <iostream>
#include <iomanip>
#include <string>
#include <ctime>
#include <cstdlib>
#include <cmath>
 
struct Point {
  double x, y;
  // это, конечно, моветон, но для примера сойдет.
  Point() : x(rand() % 20), y(rand() % 20) {}
  Point(const double &x, const double &y) : x(x), y(y) {}
  double getDistanceTo(const Point &a) {
    return sqrt(pow(x - a.x, 2) + pow(y - a.y, 2));
  }
  Point advanceTowards(const Point &a, double amount) {
    double distance = getDistanceTo(a);
    return Point(x + (amount * (a.x - x)) / distance,
      y + (amount * (a.y - y)) / distance);
  }
};
 
std::ostream &operator<<(std::ostream &stream, const Point &p) {
  return stream << std::fixed << std::setprecision(4) << 
    "[" << std::setw(7) << p.x << ", " << std::setw(7) << p.y << "]";
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
 
  const size_t numberOfPoints = 10;
  Point points[numberOfPoints];
  Point point;
  double step = (rand() % 10 + 1) / 10.;
 
  for (size_t i = 0; i < numberOfPoints; ++i) {
    while (point.getDistanceTo(points[i]) >= step) {
      std::cout << point << " -> " << points[i] << ", step = " <<
        step << std::endl;
      point = point.advanceTowards(points[i], step);
    }
    point = points[i];
    std::cout << "Point has come to " << points[i] << std::endl;
  }
 
  std::cin.get();
  return 0;
}
1
xtorne21st
интересующийся
304 / 275 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
02.04.2013, 02:51 6
смысл тотже)

Добавлено через 7 минут
Хотя наверное более стуктурировано

Добавлено через 5 минут
Вынужден признать - хороший код.
0
02.04.2013, 02:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2013, 02:51

Во введенной строке заменить все запятые на точки, а точки - на восклицательные знаки
Во введенной строке заменить все запятые на точки, а точки - на восклицательные...

Во введенной строке заменить все запятые на точки, а точки - на восклицательные знаки
15. В введенной строке заменить все запятые на точки, а точки - на...

Массив, заполненный 1 и 0. Найти путь, состоящий из нулей, от точки до точки.
Доброго времени суток всем! Вот такая задача, ничего не могу даже сообразить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru