Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
1514 / 905 / 328
Регистрация: 17.05.2015
Сообщений: 3,417
1

Задать условие и закон движения

10.09.2015, 20:07. Показов 1486. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Планирую реализовать: несколько объектов, каждый движется по собственному закону, проверяя условие. Закон будет в формате "у=-х", условие "х>-10 && x<10 && y >-10 && y<10".
Пока думаю записывать закон и условие в формате стринг, потом парсить и рассчитывать, но какой то это колхоз; есть же, например свойство Color, может есть и что то вроде Condition?
Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2015, 20:07
Ответы с готовыми решениями:

Inventor 2008: задать закон движения телу с 3 степенями свободы на перемещение.
Задал графики углов поворота двух шарниров по времени через Input grapher, получил траектории ...

Выполнить кинематический анализ движения точки, если закон ее движения имеет вид
1. Координатный способ описания движения точки Выполнить кинематический анализ движения точки,...

Закон движения
Нужна помощь в решении задачи. Написать закон движения бусинки по &quot;ПРОВИСАЮЩЕЙ&quot; проволоке.

Закон движения точки
Точка движется относительно диска по закону r = r (t). Диск вращается относительно наблюдателя с...

7
1150 / 742 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
10.09.2015, 21:47 2
Цитата Сообщение от Рядовой Посмотреть сообщение
Закон будет в формате "у=-х"
Закон движение подразумевает зависимость положения от времени. Времени тут не видно.
Цитата Сообщение от Рядовой Посмотреть сообщение
условие "х>-10 &&...
Надо проверить соответствует ли закон этим условиям?
Цитата Сообщение от Рядовой Посмотреть сообщение
есть же, например свойство Color
У кого?
0
1514 / 905 / 328
Регистрация: 17.05.2015
Сообщений: 3,417
10.09.2015, 21:56  [ТС] 3
Закон движение подразумевает зависимость положения от времени. Времени тут не видно.
Не закон а график, не так выразился, но, надеюсь, суть понятна.
Надо проверить соответствует ли закон этим условиям?
Я хочу чтобы было так:
C#
1
2
3
4
if (x<10) x++; //x=3 допустим
y = -3
if (y<10)
...
да, проверять соответствуют ли переменные условиям
есть же, например свойство Color
У кого?
Вообще, system.drawing.color. Мы вводим именно цвет, а не строку "красный" а потом парсим что же там за цвет. Хотелось бы подобие для условий
0
1150 / 742 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
10.09.2015, 22:16 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
    struct Point
    {
        public int X {get; private set;}
        public int Y {get; private set;}
        public Point(int x, int y)
            : this()
        {
            X = x;
            Y = y;
        }
    }
    static class Filtres
    {
        public static Predicate<Point> AbsLessThen10
        {
            get {return new Predicate<Point>((p) => { return p.X < 10 && p.Y < 10 && p.Y > -10 && p.X > -10; });}
        }
        public static Predicate<Point> AllPositive
        {
            get { return new Predicate<Point>((p) => { return p.X > 0 && p.Y > 0; }); }
        }
    }
 
    class Program
    {
        static bool Check(Point point, Predicate<Point> predicate)
        {
            return (predicate(point));
        }
 
        static void Main(string[] args)
        {
            Point a = new Point(5, 5);
            Console.WriteLine(Check(a, Filtres.AllPositive));
            Console.ReadKey();
        }
    }
0
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
10.09.2015, 22:18 5
Цитата Сообщение от Рядовой Посмотреть сообщение
Мы вводим именно цвет, а не строку "красный" а потом парсим что же там за цвет
color.FromName
color.FromRgb

Хм...малость не дочитал задачу

Собственно парсер такой строки х>-10 && x<10 && y >-10 && y<10 написать легко. Можно даже готовые парсеры найти...
0
1514 / 905 / 328
Регистрация: 17.05.2015
Сообщений: 3,417
10.09.2015, 23:02  [ТС] 6
Lexeq, нет, так мне придется писать много классов фильтр с разными условиями для разных графиков движения. Вот предикарты - это оно, я правда не знаю как ими пользоваться. Я хочу примерно такой класс:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Ball
    {
        public void Ball(int x, int y, Predicate<Ball> con, string law)
        {
            X = x;
            Y = y;
            cond = con;
            Law = law;
        }
        public int X;
        public int Y;
        Predicate<Ball> cond;
        public string Law;
        public void Update()
        {
            X++;
            //дальше проверка соответствию предикарта и рассчеты
        }
    }
и вызывать вроде:
C#
1
Ball s = new Ball (2,2, X<10 && X>-10, Y=-X);
Разумеется, этот код не рабочий. Подскажите как правильно обращаться с предикартами и как лучше записать график движения, нежели чем в string...
0
1150 / 742 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
11.09.2015, 02:06 7
Лучший ответ Сообщение было отмечено Рядовой как решение

Решение

Прочитайте про делегаты и лямбда выражения.
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
    public class Ball
    {
        public int X { get; private set; }
        public int Y { get; private set; }
        private Predicate<Ball> condition;
        private Func<int, int> function;
        public Ball(int x, int y, Func<int, int> function, Predicate<Ball> condition)
        {
            this.X = x;
            this.Y = y;
            this.condition = condition;
            this.function = function;
        }
 
        public void Update()
        {
            X++;
            Y = function(X);
            if (condition(this))//если этот Ball соответствуе уловию
            {
 
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Ball ball = new Ball(2, 2, (x) => { return -x; }, (b) => { return b.X < 10 && b.Y > -10; });
            ball.Update();
            Console.ReadKey();
        }
    }
Можно и без лямбд
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        static int Funct(int x)
        {
            return -x;
        }
        static bool Cond(Ball b)
        {
            return b.X > -10 && b.X < 10;
        }
        static void Main(string[] args)
        {
            Ball ball = new Ball(2, 2, Funct, Cond);
            ball.Update();
            Console.ReadKey();
        }
P.S. Если вы все же делаете движение, то лучше использовать функцию от времени, тогда можно будет легко прикрутить шарику ускорение и прочее. Если строите график, тогда проще задать функцию, пределы и шаг.
0
1514 / 905 / 328
Регистрация: 17.05.2015
Сообщений: 3,417
11.09.2015, 08:26  [ТС] 8
C#
1
Ball ball = new Ball(2, 2, (x) => { return -x; }, (b) => { return b.X < 10 && b.Y > -10; });
Вот, то что хотел, спасибо большое)
0
11.09.2015, 08:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2015, 08:26
Помогаю со студенческими работами здесь

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

Найти закон движения точки
Материальная точка массой m=25кг притягивается к неподвижному центру О силой,пропорциональной...

Найти закон движения точки
Здравствуйте! Есть задача : «найти закон движения точки по траектории, если в любой момент времени...

Закон движения точки, сила
Частица движется вдоль некоторой оси так, что ее координата x изменяется по закону x(t)=At^2-Bt^3,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru