Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12

Определение функции максимально быстрого перемещения на заданное расстояние

03.03.2023, 14:30. Показов 1242. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Точка перемещается от начала координат до расстояния L. Помимо этого расстояния известна максимально возможная скорость движения, а также максимальное ускорение. Задача: определить гладкую или кусочно-гладкую функцию скорости, при которой точка будет перемещаться за минимально возможное время. В начале и конце маршрута скорость должна равняться 0. На выход выдать массив T, X, V, A.

У меня просто кончились идеи реализации алгоритма. Были такие версии:
1) Движение с переменным ускорением можно выразить как интеграл по v(t), значение которого на концах известны, а площадь, т.е. значение интеграла - пройденный путь. Но чтоб работать с интегралом нужно знать пределы интегрирования, а это время начало и время старта. Разумеется это неизвестно.
2) Сымитировать релейный регулятор. Т.е. ускоряемся в каждой точке до максимального ускорения и максимальной скорости, а где надо тормозим. Но тогда будут разрывы и непонятно что с концом.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2023, 14:30
Ответы с готовыми решениями:

Список для максимально быстрого поиска по нему
Сейчас у меня есть два списка строк - List<string> один MainBase, второй TempBase, мне надо выбрать из TempBase все строчки, которых нет в...

Добавить папки для быстрого копирования и перемещения файлов. Linux Mint 13 Maya
Linux Mint 13 Cinnamon "Maya". Здравствуйте. Подскажите, возможно ли добавить сюда: для быстрого КОПИРОВАНИЯ и ПЕРЕМЕЩЕНИЯ, папки...

Большое расстояние между иконками в панели быстрого запуска
Такой вопрос, в панели быстрого запуска большое расстояние между значками (скриншот). Не знаю, у всех ли так? Можно ли это расстояние...

16
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
03.03.2023, 17:38
rerre, как понимать величины в вашей задаче ? И их математические отношения ?
0
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
03.03.2023, 18:19  [ТС]
Volga_, возможно я совсем не так понял ваш вопрос но попытаюсь. Условимся таким образом:
L - расстояние, которое необходимо пройти (м)
Vmax - максимально возможная скорость (м/с)
Amax - максимально возможное ускорение (м/(с^2)
Начальная координата 0. Конечная (что логично) - L
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
03.03.2023, 18:47
rerre, кажется, нужно применять "вариационное исчисление" ?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
03.03.2023, 19:05
если я понял задачу, то решение простое,
выбираем
ускорение = максимальное ускорение, направление = на цель, не изменяем их на протяжении маршрута. - приедем быстрее всего!
0
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
03.03.2023, 19:12  [ТС]
Volga_, Честно говоря, впервые читаю про это, но ближайшее похоже, что наше из этого - это задача о брахистохроне. Однако там рассматривается движение под действием постоянной силы тяжести, а это не туда.

Добавлено через 2 минуты
Kuzia domovenok, Так действительно можно было бы решить, но в условии указано, что в конце маршрута скорость должна быть равной 0. Это значит, что помимо достижения максимумов по ускорению и скорости нужно предусмотреть торможение, дабы в конечной точке остановиться. Это то, что и помешало решить задачу как в простейшей робототехнике с релейным регулятором
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
03.03.2023, 19:21
Цитата Сообщение от rerre Посмотреть сообщение
Так действительно можно было бы решить
Ну ну совсем так, функция скорости вам нужна гладкая по условию. А порядок гладкости - другой вопрос. Я не спец в мат. анализе, можно решить просто - до середины пути двигаемся с максимальным ускорением или максимальной скоростью, вторую половину пути проходим так же, только "наоборот". При этом получим соблюдение всех условий, кроме гладкости - кривая скорости будет ломанной. А сгладить её можно разложив в ряд фурье, и чем выше дискретизация, тем точнее получится.
0
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
03.03.2023, 21:11  [ТС]
zayats80888, Пока набросал расчет движения только в тех случаях, при которых время разгона не будет превышать половину пути. Но по непонятной мне причине где-то в конце постоянно теряю 1-2 метра от нужного.
Для примера, L = 100, Vmax = 10, Amax = 2 => конечная дистанция 98 метров.

Как это сглаживать пока ума не приложу.

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
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
 
 
int main()
{
    //freopen("output.csv","w",stdout);
    float L, Vmax, Amax, x = 0, current_V = 0, current_A = 0, t = 0, h = 0.1;
    cin>>L>>Vmax>>Amax;
    float t_Vmax = Vmax/Amax; // время до достижения максимальной скорости
    float s_Vmax = (Amax*pow(t_Vmax,2))/2; // дистанция разгона/торможения
    if (s_Vmax < L/2){
    float t_mid = t_Vmax+(L/2-s_Vmax)/Vmax; // время до достижения середины пути
    float t_braking = t_mid + (t_mid-t_Vmax); // время до тороможения
    float t_all = t_Vmax + t_braking; // суммарное время
    //cout<<t_all<<" "<<t_Vmax<<" "<<t_mid<<" "<<t_braking<<" "<<s_Vmax<<endl;
    cout<<"X"<<";"<<"V"<<";"<<"A"<<";"<<"t"<<endl;
    for (float i = 0; i<=t_all; i+=h)
    {
        if(i<=t_Vmax) // если не достигли времени набора критичной скорости
        {
            current_A = Amax;
            current_V = current_A*i;
            x = (current_A*pow(i,2))/2;
        }
        else
        {
            if(i<t_braking) // если не достигли времени торможения
            {
                current_A = 0;
                current_V = Vmax;
                x += (current_V*h);
            }
            else // тормозим
            {
                current_A = -Amax;
                current_V = current_V + current_A*h;
                x += current_V*h + (current_A*pow(h,2))/2;
            }
        }
        cout<<x<<";"<<current_V<<";"<<current_A<<";"<<i<<endl;
    }
    }
             return 0;
}
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
03.03.2023, 21:21
Цитата Сообщение от rerre Посмотреть сообщение
Kuzia domovenok, Так действительно можно было бы решить, но в условии указано, что в конце маршрута скорость должна быть равной 0.
первую половину пути разгоняемся с максимальным ускорением, вторую - тормозим. Не сильно пострадлало решение в простоте с этим дополнением.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
03.03.2023, 21:36
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
первую половину пути разгоняемся с максимальным ускорением, вторую - тормозим
Так может не получится.
Если максимального ускорения будет недостаточно для достижения максимальной скорости.

rerre,
Походу задачка чисто математическая.
Чой-та оно тута делает ?

Добавлено через 1 минуту
Ну да, там же загвоздка в типе функции, гладкой...

Добавлено через 7 минут
rerre,
Цитата Сообщение от rerre Посмотреть сообщение
Пока набросал расчет движения
Где, собственно ваша функция (мат.)?
0
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
03.03.2023, 21:44  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Если максимального ускорения будет недостаточно для достижения максимальной скорости.
теоретически, и тут смысл вроде есть. Просто разгоняться надо либо до достижения максимальной скорости. Либо до середины пути. Если ускорения хватает, то выходим на плато и тормозим. Иначе половину пути разгоняемся, а вторую тормозим.

Цитата Сообщение от SmallEvil Посмотреть сообщение
Где, собственно ваша функция (мат.)?
Одной функцией описать это не смог.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
03.03.2023, 22:56
Цитата Сообщение от rerre Посмотреть сообщение
Но по непонятной мне причине где-то в конце постоянно теряю 1-2 метра от нужного.
У вас цикл по float, сделайте нормально.
Что-то типа такого(не проверял)
Кликните здесь для просмотра всего текста
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
#include <cassert>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
 
// кусочная функция
class Function {
    // тут только V(t), остальное сами добавьте
    std::vector<std::pair<double, double>> m_fn;
 
public:
    Function(double vMax, double aMax, double L) {
        m_fn.emplace_back(0.0, 0.0);
        double halfL = L * 0.5;
        double tvMax = vMax / aMax;
        double lvMax = aMax * tvMax * tvMax * 0.5;
        if (lvMax >= halfL) {
            double dt = std::sqrt(halfL / aMax * 2.0);
            m_fn.emplace_back(dt, aMax * dt);
            m_fn.emplace_back(dt + dt, 0.0);
        } else {
            m_fn.emplace_back(tvMax, vMax);
            double dt = (halfL - lvMax) / vMax * 2.0;
            m_fn.emplace_back(dt + tvMax, vMax);
            m_fn.emplace_back(dt + tvMax + tvMax, 0.0);
        }
        assert(m_fn.size() > 1);
        assert(std::is_sorted(m_fn.begin(), m_fn.end()));
    }
 
    std::pair<double, double> minMaxArg() const {
        return {m_fn.front().first, m_fn.back().first};
    }
 
    double get(double t) const
    {
        auto it = std::lower_bound(m_fn.begin(),
                                   m_fn.end(),
                                   t,
                                   [](auto const &p, double t)
                                   { return p.first < t; });
        if (it == m_fn.end())
            return m_fn.back().second;
        else if (it == m_fn.begin())
            return m_fn.front().second;
 
        auto prev = it - 1;
        return std::lerp(prev->second, it->second, (t - prev->first) / (it->first - prev->first));
    }
};
 
int main()
{
    Function f(10, 2, 100);
    auto dt = f.minMaxArg();
    std::cout << "t = " << dt.second << '\n';
    for (int i = 0; i < 100; ++i)
        std::cout << f.get(std::lerp(dt.first, dt.second, i / 99.0)) << '\n';
}

Цитата Сообщение от rerre Посмотреть сообщение
Как это сглаживать пока ума не приложу.
Ну вы сначала определите критерий сглаженной функции, как дифференцировать её будете и т.д.
1
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
04.03.2023, 00:33  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Что-то типа такого(не проверял)
Спасибо. Для меня пока очень сложный синтаксис, но буду потихоньку разбираться
0
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
06.03.2023, 02:42  [ТС]
zayats80888, помозговал выходные и пришел к выводу о том, что можно решить задачу без дополнительного сглаживания, пользуясь только определениями гладкой и кусочно-гладкой функциями. Гладкость обеспечивается непрерывностью производной функции. Соответственно, для того, чтобы V(t) была гладкой - a(t) должна быть непрерывной линейной или кусочно-линейной функцией. С такой функцией ускорения остается определить путь, который необходимо пройти за время разгона/торможения, а это двойной интеграл, который спокойно считается численными методами. Расчет скорости и пройденного пути - просто комбинации s v t.

Переделал код. И вроде бы складно, но все равно либо завышает по скорости или пути, либо занижает (в зависимости от случая). Стоит ли вообще в эту сторону идти или искать ответ в другом месте?
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
#include <cassert>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
#include <fstream>
using namespace std;
 
 
double lerp(double a, double b, double t)
{
    return(a+t*(b-a));
}
 
double f(double x, double y)
{
    return y*x*x*0.5;
}
double integ(double a1,double b1,double a2,double b2, int n1,int n2)
{
    double I=0,h1=(b1-a1)/n1,h2=(b2-a2)/n2;
    for (double x=a1;x<=b1;x+=h1)
    {
        for (double y=a2;y<=b2;y+=h1)
            I+=h1*h2*f(x+h1/2,y+h2/2);
 
    }
        return I;
 
}
 
// кусочная функция
class Function {
 
    vector<pair<double, double>> m_fn; // A(t)
 
 
public:
    Function(double vMax, double aMax, double L) {
        m_fn.emplace_back(0.0, aMax);
 
        double halfL = L * 0.5;
        double tvMax = (vMax / aMax)*2; /// время разгона до максимальной скорости
        double lvMax = integ(0, tvMax, 0, aMax, 100, 100); /// lvMax - путь, пройденный до достижения максимальной скорости
        if (lvMax >= halfL) { /// если путь разгона больше либо равен половине пути, тогда тормозим
            double dt = tvMax + (halfL - lvMax) / vMax; /// здесь dt - время на половине пути
            m_fn.emplace_back(dt, 0);
 
            m_fn.emplace_back(dt + dt, -aMax);
 
        } else {
            m_fn.emplace_back(tvMax, 0); /// в конец время разгона ускорение = 0
 
 
            double dt = (halfL - lvMax) / vMax * 2.0; /// здесь dt - время движения с максимальной скоростью, но без ускорения
            m_fn.emplace_back(dt + tvMax, 0);
 
            m_fn.emplace_back(dt + tvMax + tvMax, -aMax);
 
        }
        assert(m_fn.size() > 1);
        assert(is_sorted(m_fn.begin(), m_fn.end()));
    }
 
    pair<double, double> minMaxArg() const {
        return {m_fn.front().first, m_fn.back().first};
    }
 
    double get(double t) const
    {
        auto it = lower_bound(m_fn.begin(), m_fn.end(),t,[](auto const &p, double t){ return p.first < t; }); /// it -
        if (it == m_fn.end())
            return m_fn.back().second;
        else if (it == m_fn.begin())
            return m_fn.front().second;
 
        auto prev = it - 1;
        return lerp(prev->second, it->second, (t - prev->first) / (it->first - prev->first));
    }
 
};
 
int main()
{
    //freopen("output.csv","w",stdout);
    Function f(10, 2, 300);
    auto dt = f.minMaxArg();
    cout << "t" << ";" << "a" << "; " << "v" << "  " << "s" <<endl;
    double v = 0, a = 0, s =0, t = 0;
 
    for (int i = 0; i < 100; ++i)
    {
 
        t = lerp(dt.first, dt.second, i / 99.0);
        a = f.get(t);
        v += a * ((dt.second-dt.first)/100);
        s += v * ((dt.second-dt.first)/100);
        cout << t << "; " << a << "; " << v << "; "  << s<<endl;
 
    }
}
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
06.03.2023, 16:06
Лучший ответ Сообщение было отмечено rerre как решение

Решение

Цитата Сообщение от rerre Посмотреть сообщение
Гладкость обеспечивается непрерывностью производной функции.
Допустим, просто в точках "излома" вообще говоря производная не существует, т.к. левая и правая производная не равны.
Цитата Сообщение от rerre Посмотреть сообщение
Переделал код. И вроде бы складно, но все равно либо завышает по скорости или пути, либо занижает (в зависимости от случая).
Численное интегрирование не точно, но чем меньше шаг, тем точнее.
Цитата Сообщение от rerre Посмотреть сообщение
Соответственно, для того, чтобы V(t) была гладкой - a(t) должна быть непрерывной линейной или кусочно-линейной функцией. С такой функцией ускорения остается определить путь, который необходимо пройти за время разгона/торможения, а это двойной интеграл, который спокойно считается численными методами.
1) По условию требуется "гладкость" только для функции скорости, и если пользоваться только критерием непрерывности, то функция ускорения может иметь разрывы первого рода.
2) Не вижу необходимости интегрирования, можно кусочные функции для всех значений сделать. Тогда для скорости и ускорения использовать линейную интерполяцию, а для перемещения считать по фрмуле, т.к. там квадратичная зависимось.

Например, так:
c++
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
#include <cassert>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <cmath>
 
struct Value {
    double a, v, l;
};
// кусочная функция
class Function {
 
    std::vector<std::pair<double, Value>> m_fn;
 
public:
    Function(double vMax, double aMax, double L) {
        Value val{};
        m_fn.emplace_back(0.0, val);
        double halfL = L * 0.5;
        double tvMax = vMax / aMax;
        double lvMax = aMax * tvMax * tvMax * 0.5;
        val.a = aMax;
        m_fn.emplace_back(0.0, val);
        if (lvMax >= halfL) {
            double dt = std::sqrt(halfL / aMax * 2.0);
            val.v = aMax * dt;
            val.l = halfL;
            m_fn.emplace_back(dt, val);
            val.a = -aMax;
            m_fn.emplace_back(dt, val);
            val.l = L;
            val.v = 0;
            m_fn.emplace_back(dt + dt, val);
        } else {
            val.v = vMax;
            val.l = lvMax;
            m_fn.emplace_back(tvMax, val);
            val.a = 0;
            m_fn.emplace_back(tvMax, val);
            double dt = (halfL - lvMax) / vMax * 2.0;
            val.l = L - lvMax;
            m_fn.emplace_back(dt + tvMax, val);
            val.a = -aMax;
            m_fn.emplace_back(dt + tvMax, val);
            val.v = 0;
            val.l = L;
            m_fn.emplace_back(dt + tvMax + tvMax, val);
            val.a = 0;
            m_fn.emplace_back(dt + tvMax + tvMax, val);
        }
    }
 
    std::pair<double, double> minMaxArg() const {
        return {m_fn.front().first, m_fn.back().first};
    }
 
    Value get(double t) const
    {
        auto it = std::lower_bound(m_fn.begin(),
                                   m_fn.end(),
                                   t,
                                   [](auto const &p, double t)
                                   { return p.first < t; });
        if (it == m_fn.end())
            return m_fn.back().second;
        else if (it == m_fn.begin())
            return m_fn.front().second;
 
        auto prev = it - 1;
        double dt = (t - prev->first);
        double param = dt / (it->first - prev->first);
        return {
            std::lerp(prev->second.a, it->second.a, param),
            std::lerp(prev->second.v, it->second.v, param),
            prev->second.v * dt + prev->second.a * dt * dt * 0.5 + prev->second.l,
        };
    }
};
 
int main()
{
    Function f(3, 5, 4);
    auto dt = f.minMaxArg();
    constexpr int width = 10;
    std::cout << std::setw(width) << 'T' << ' '
              << std::setw(width) << 'A' << ' '
              << std::setw(width) << 'V' << ' '
              << std::setw(width) << 'L' << std::endl;
    for (int i = 0; i < 100; ++i) {
        double t = std::lerp(dt.first, dt.second, i / 99.0);
        Value val = f.get(t);
        std::cout << std::setw(width) << t << ' '
                  << std::setw(width) << val.a << ' '
                  << std::setw(width) << val.v << ' '
                  << std::setw(width) << val.l << std::endl;
    }
}

output

Bash
1
$ gnuplot -e "set term png size 600, 400; set output 'out.png'; plot '< ./test' using 'T':'A' with lines lw 2, '' using 'T':'V' with lines lw 2, '' using 'T':'L' with lines lw 2"
f(5, 1, 4)


f(3, 5, 4)
2
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
06.03.2023, 17:53  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Например, так:
В данных случаях графики V(T) не являются гладким, т.к. существует скачок, появившийся в следствие устранения разрыва 1 рода.

Я стремлюсь к чему-то такому (рисунок ниже). Собственно отсюда и выскочил интеграл. То, что ускорение имеет разрыв перед нулевым значением, является следствием того, что определенное время разгона/торможения является неточным.


Цитата Сообщение от zayats80888 Посмотреть сообщение
Не вижу необходимости интегрирования, можно кусочные функции для всех значений сделать
Да. Ускорение можно представить кусочно-линейной функцией:
a(t) = (-aMax/tvMax)*t + aMax при 0 <= t <= tvMax
a(t) = 0 при tvMax < t <= tvMax + (halfL - lvMax) / vMax * 2.0
a(t) = (-aMax/tvMax)*(t-(halfL - lvMax) / vMax * 2.0) + aMax при tvMax + (halfL - lvMax) / vMax * 2.0 <= t <= (halfL - lvMax) / vMax * 2.0 + tvMax * 2

Однако и здесь для принятия решения о пути разгона нужно интегрирование.

Цитата Сообщение от zayats80888 Посмотреть сообщение
Численное интегрирование не точно, но чем меньше шаг, тем точнее.
Ошибка, которая вызывает неточность связана с неточностью моего варианта определения времени разгона. Считал я его исходя из физического смысла интеграла, тогда задача определения времени сводится к определению такого катета прямоугольного треугольника, что его площадь будет равна площади под графиком в случае постоянного ускорения. Но расчетное значение завышено
Миниатюры
Определение функции максимально быстрого перемещения на заданное расстояние  
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
06.03.2023, 18:36
Цитата Сообщение от rerre Посмотреть сообщение
В данных случаях графики V(T) не являются гладким,
Но является кусочно-гладким, по крайней мере по определению из википедии.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.03.2023, 18:36
Помогаю со студенческими работами здесь

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

Время заданное для перемещения между операциями
Здравствуйте В цех поступают заготовки через 3+-1 мин. Вначале деталь обрабатывается на токарном станке в течение 12+-3 мин. Далее...

Определить, при каком х расстояние между f1 (x) и f2 (x) максимально
Помогите пожалуйста с двумя задачами: 1) Значения функции f1(х)=3+sqr(sin(x/2)) и f2(x)=1+sqr(cos(x/3)) определены в точках...

Разработать метод, который возводит заданное число х в натуральную степень п, используя алгоритм быстрого возведения
С помощью данного метода для каждого числа х на отрезке с шагом h вывести на экран значение х в n-ной степени, где n — порядковый ...

Определить номера станций, расстояние между которыми максимально
:)В массиве T содержаться данные о расстоянии меджу парами станций , расположенных на участке дороги &quot;Серпухов-Тула&quot; ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru