• Как проверить вхождение диапазона в диапазон?

    sarapinit
    @sarapinit
    Точу водой камень
    class Program
        {
            private static readonly Range[] ExistedRanges = {
                new Range(0, 2),
                new Range(5.01f, 7),
                new Range(7.01f, 9)
            };
    
            public static bool IsValidRange(Range range)
            {
                return !ExistedRanges.Any(o => o.IsCross(range));
            }
    
            static void Main()
            {
                Console.WriteLine(IsValidRange(new Range(2.01f, 5)));
                Console.WriteLine(IsValidRange(new Range(11, 13)));
                Console.WriteLine(IsValidRange(new Range(1, 3)));
                Console.WriteLine(IsValidRange(new Range(3, 10)));
    
                Console.ReadKey();
            }
        }
    
        public struct Range
        {
            public readonly float Start;
            public readonly float End;
    
            public Range(float start, float end)
            {
                Start = start;
                End = end;
            }
    
            public bool IsCross(Range other)
            {
                return Math.Min(Math.Max(Start, End), Math.Max(other.Start, other.End)) >=
                       Math.Max(Math.Min(Start, End), Math.Min(other.Start, other.End));
            }
        }


    Алгоритм проверки пересечения не мой. Взял когда-то с просторов интернета. Но не помню где взял и как он называется. Если кто-то знает, напишите в комментах.
    Ответ написан
  • Некоректная работа функции Vector3.Angle в unity, что делать?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Баг у вас в том, что вы не прочитали документацию. Можете взять листочек в клеточку, поставить две любые точки и ответить на вопрос - какой между ними угол.
    А функция считает угол между векторами, а вы ей координаты подсовываете.
    Ответ написан
  • Почему не обновляется ProgressBar?

    xpert13
    @xpert13
    Full Stack Developer
    ShowDialog стопорит дальнейшее выполнение кода до тех пор, пока форма не будет закрыта. Вам нужно сначала обновлять прогрессбар, а потом отображать форму:

    public void AnalysisData()
    {
      ProgressForm PF = new ProgressForm();
      PF.UpdateProgress(50);
      PF.ShowDialog(this);
    }
    Ответ написан
  • Я не до конца понимаю ООП, что мне надо знать?

    @Stqs
    senior software developer
    на вашем примере конечно сложно аргументировать зачем нужно ооп
    но все это действительно связано с управлением сложностью и разработкой более менее больших систем

    проблема в том что мозг устроен так, что ему сложно держать в голове одновременно(объем внимания) больше 7-10 объектов
    есть конечно уникалы, да и программирование вцелом этот скил конечно развивает но если брать среднего обычного человека то это действительно так.
    Как пример - попробуйте решить задачку Эйнштейна в голове Ж) Там нет ничего сложного но нужно одновременно держать пару десятков кусочков информации в голове. БОльшинство людей это не в состоянии сделать.
    По этой же причине:
    - на рекламных плакатах вы не увидите длинных текстов - 5-7 слов максимум
    - функция из 10-20 строк легче воспринимается чем из 100-200 строк,
    - 5-7 аргументов функции легче осилить чем 27
    - 5-7 переменных в функции легче удержать в голове чем 20
    и тд и тп

    Проблема особенно актуальна в программировании
    Вы можете написать функцию как и хотели. все ок. претензий нет.
    вы напишете еще 10 функций и еще сможете понимать что там написано
    но что если их будет 100? 1000?
    Вы сможете так же быстро разбираться в том что происходит в программе? особенно после полугода перерыва например
    отсюда возник вполне естественный верхний потолок для размера программ - больше просто нереально было поддерживать. Нереально удержать в голове даже командой
    Написание кода таким способом очень плохо масштабируется

    ежели вы применяете ооп то каждый класс можно рассматривать как отдельную сущность у которой относительно небольшое количество полей/методов. то есть во-первых их теперь можно вместить в голову не принимая во внимание тонны окружающего кода, во-вторых, что самое главное, их и не нужно вмещать в голову потому что ты теперь вместо 100 функций в голове держишь картинку из 7 классов, что очень легко
    если нужно знать реализацию конкретной сущности - идешь и читаешь - она гарантированно поместится в голову
    вы можете сказать но у меня в программе может появится 100 классов или 1000 классов, что тогда? тут на помощь приходит абстрагирование
    скорее всего многие из этих 100 классов входят в какие-то(возможно абстрактные) структуры более высокого порядка, поэтому хоть классов у вас и 100 - работа с ними может быть облегчена введением классов на следующем, более высоком уровне абстракции которые работают с классами более нижнего уровня абстракции, таким образом вы опять работаете с те ми же 10 сущностями, которые отлично помещаются в голову
    это все приводит к тому что теоретически, программа на опп масштабируется бесконечно
    теряешь контроль над сложностью - абстрагируешься
    интересуют детали - опускаешься на нужный уровень и изучаешь как конкретный класс работает
    не говоря уже о бонусах которые ты получаешь имея наследование, полиморфизм и собственно инкапсуляцию

    ну и еще плюсом можно назвать то что ООП все-таки более подходит для описания того что происходит вокруг
    если мы посмотрим вокруг то все что мы видим - объекты, с какой-то внутренней сложной структурой
    мы явно можем эти объекты группировать(классы) - люди, компьютеры, машины
    мы видим что эти объекты могут взаимодействовать друг с другом через определенный интерфейс, и их совершенно не интересует как конкретный объект устроен внутри(инкапсуляция)
    то есть при ооп работа сводится к тому что бы выделить сущности которыми ты реально будет оперировать в своей программе, определить интерфейс(как они могут взаимодействовать. А дальше лишь описывать эти взаимодейсвтия. При этом вам нет необходимости держать в поле зрения все имеющиеся классы, их методы, поля, всю логику их поведения и взаимодействия,
    Ответ написан
  • Скрыть область видимости переменной?

    mindtester
    @mindtester Куратор тега C#
    https://youtu.be/UtO6HIp1908?list=RDUtO6HIp1908
    в заданном наборе требований решения нет
    Ответ написан
  • Как урезать строку с конца в C#?

    mindtester
    @mindtester Куратор тега C#
    https://youtu.be/UtO6HIp1908?list=RDUtO6HIp1908
    Remove(Int32) upd в вашем случае просто указать стартовую позицию для удаления (8)

    так как string неизменяемый класс, Remove тоже функция возвращающая значение, в котором что то удалено

    ps
    стековефлоу
    - неа, в данном случае сразу MSDN ;)))

    pps точнее visual studio intellisense, полезно просматривать выбор после точки, чуть что F1, и вот уже MSDN ))
    Ответ написан
  • Зачем нужны статические классы в c#?

    mindtester
    @mindtester Куратор тега C#
    https://youtu.be/UtO6HIp1908?list=RDUtO6HIp1908
    если можно все равно методы и поля объявить статическим в обычном классе?
    есть классная штука - методы расширения (1,2, а еще на них почти весь api LINQ построен), так вот их можно объявлять только в статических классах

    upd еще одна особенность - статический класс существует в одном экземпляре и инициализируемый сразу после запуска. это отдаленный эквивалент глобальных методов, переменных и констант. иногда это бывает удобно.
    Ответ написан