С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/57: Рейтинг темы: голосов - 57, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 3
1

Движение точки по ломаному пути

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

Author24 — интернет-сервис помощи студентам
Очень нужна помощь с таким заданием:

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

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

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

рисовать не обязательно - главное чтоб можно было увидеть в коде "механику" движения
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.05.2010, 11:08
Ответы с готовыми решениями:

Движение обьекта по кратчайшему пути до точки
Всем привет! дается поле ~14x14 клеток. каждая клетка - обьект Image. Все картинки находятся в...

Движение точки. Как найти координаты, если ивестен угол и длина пути?
Здравствуйте, как найти координаты точки при движении с заданным углом? Есть точка (на рисунке...

Движение спутника. Движение точки по эллипсу в c++ builder
Здравствуйте, есть код программы, который строит движение точки по эллипсу. Для этого...

Поиск кратчайшего пути из точки А до точки В на шахматной доске шагом коня
Всем привет. Я новичек в программировании. Большую сложность вызвала задача в которой необходимо...

Поиск кратчайшего пути от точка 1 до точки n, пройдя все остальные точки
в общем такая задача, есть n точек. и расстояние от каждой точки до других. как найти минимальное...

5
Эксперт С++
1936 / 1048 / 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
0 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 3
21.05.2010, 05:29  [ТС] 3
Спасибо, а можно поподробнее про плавное перемещение?
0
интересующийся
311 / 282 / 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
4866 / 2664 / 914
Регистрация: 29.11.2010
Сообщений: 5,746
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
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
02.04.2013, 02:51 6
смысл тотже)

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

Добавлено через 5 минут
Вынужден признать - хороший код.
0
02.04.2013, 02:51
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.04.2013, 02:51
Помогаю со студенческими работами здесь

Поиск кратчайшего пути от точки до точки по односторонним дорогам
Доброго времени суток, попалась такая задача: distance_metric VSP VAL VSP_E GROUP_VSP...

Вывести значения вершин выбранного пути от точки А до точки Б
Привет. Есть программа, которая считает минимальный путь в матрице. Как в ней вывести значения...

Задача (вывести длину кратчайшего пути от точки до точки.)
Пишу задачу, нужно вывести длину кратчайшего пути от точки до точки. проблема в том, что после...

Движение точки описывается уравнениями . Построить линию траектории движения точки
Движение точки описывается уравнениями x=cos^(2)*(kt), y=sin^(2)*(kt). Построить линию траектории...

Поиск кратчайшего пути от точки А до точки В
Всем добрый день!)Нужен совет. Реализовал алгоритм для поиска кратчайшего пути от т.А до т.В.,но...

Движение от точки А к точки Б. Искусственный интеллект
Есть, кто может помочь с написанием кода, чтобы бот двигался к игроку ? Кто согласится помочь,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Блоги программистов
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­хро­н­н­ы­й счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru