Вы правы, стихи у меня не получаются. Программист не обязан быть Пушкиным, но развивать себя всесторонне я считаю необходимым. Возможно, в следующий раз стихи получатся лучше. Тренировка - это множество повторений до получения абсолютного успеха.
Визуал приятный, генерация контента-заглушки для прототипа - это отличная ниша, которую заняли сетки. На телефоне игра не работает. Выдаёт 1 кадр раз в 1-1.5 секунд, задержка на клик по экрану секунд 5 на флагмане прошлого года.
Интересно было прочитать. Единственный вопрос: зачем искусственно менять то, что уже хорошо работает? Каков прок от нагрева Титана?) Жизнь может быть не белковой с комфортной температурой +25°, потребностью в воде и кислороде, а какой-нибудь другой, для которой лучшие условия - те, который сейчас есть на Титане.
Чтобы подготовить экспедицию на Титан для начала нужно решить задачу полёта через 8а.а., чтобы у космонавтов хватило воды, еды, воздуха, etc., чтобы они смогли вернуться с Титана обратно. После решения этого -180° на Титане едва ли станет причиной чтобы его нагреть.
Честные дженерики потребуют изменения структуры jvm, что приведёт к отказу от обратной совместимости. Если очень нужно разделять List<A> от List<B> и менять архитектуру нельзя/невозможно, то решением будет наследование от списка с реализацией метода Class getElementClass().
Так ли часто нужен unsigned? На практике редко. Для unsigned int есть Integer.compareUnsigned(a, b), и другие функции. То же для остальных примитивов.
Приятно видеть попытки разобраться в линейной алгебре на плоскости, это поможет не только в разработке игр, но и при создании разметки изображений.
А теперь расскажу о простом для понимания, но несколько дорогом для cpu (задействуется извлечение корня) алгоритме о пересечении отрезков. Поехали.
Первым делом зададим точки A, B, C, D на двумерной плоскости, А и В задают первый отрезок, C и D - второй.
Основная идея - привести систему к вырожденному случаю, когда точка А' имеет координаты (0, 0), а точка В' лежит на оси ОХ.
Первым делом вычтем из точек В, С и D точку А, так мы достигнем первого условия. Теперь нужно повернуть точки С и D вокруг точки А (точку В поворачивать не нужно, её координаты будут (length(A, B), 0)). Для этого воспользуемся матрицей поворота, для неё нужны синус и косинус угла линии AB, благо их легко вычислить, зная длину AB и расстояние по оси ОХ и ОY между точками А и В.
После умножения точек С и D на матрицу поворота мы получим С' и D' в локальных координатах отрезка АВ.
Задача о пересечении становится тривиальной:
Точки С' и D' с разных сторон оси ОХ, или одна из точек близка к отрезку А'В' на некоторую эпсилон.
Теперь когда точки С' и D' с разных сторон оси ОХ мы можем найти точку пересечения С'D' и ОХ:
Найдем расстояние по ОХ между С' и D' (cdLy)
Найдём параметр alpha, поделив координату Y точки С' на расстояние по OY точек С' и D'.
Найдём координату X точки М' (пересечение), помножив cdLy на alpha. Координата X должна оказаться больше или равна 0 и меньше или равна длине АВ, в противном случае отрезки не пересекаются.
Вернём точку М' в мировое пространство, помножив её на инверсную матрицу поворота (в данном случае нужно всего лишь поменять знаки). По факту здесь можно умножить кординату X точки М' на синус и косинус угла линии АВ.
После этого к точке М нужно прибавить координаты точки А.
Весьма долгий путь, зато общий. Так можно найти расстояние от отрезка до точки (а заодно самую ближайшую точку на отрезке к заданной точке), то же можно провернуть с лучом или линией, приведя их к форме отрезка и убрав проверки на ось ОY и/или длину АВ.
Подобный подход можно использовать для пересечения отрезка и треугольника в трёхмерном пространстве. В таком случае пусть треугольник будет АВС, а отрезок DE. Аналогично нужно из точек B, C, D и Е отнять точку А и помножить на матрицу треугольника АВС (тангент - сторона АВ, нормаль - векторное произведение АВ и АС, битангент - тангент х нормаль, получится матрица TBN. Все вектора T, B, N нужно нормализовать). После этого задача опять тривиальна: точка А' лежит в начале координат, точка В' на оси ОХ, а точка С' выше оси ОХ. Найти точку пересечения в этом случае тривиально, описывать не стану.
IMHO, автоматическую генерацию коммитов можно реализовать через поиск убранных "//TODO:" и "//fixme:" и добавленных. Это можно было бы объединить с багтрекером, или issue.
Только до тех пор, пока вместо списка не окажется numpy array, который в случае a = np.asarray([1,2,3]) * 3 выдаст [3, 6, 9].
В этом и минус питона при обучении - скрытость типов данных. На мой взгляд, лучше начинать с С++, Java, любого другого языка, где типы данных указываются явно и нет перегрузки операторов "из коробки".
Такую простую 2д анимацию в питоне лучше сделать через pygame. Если нужно что-то мощнее - DirectX/OpenGL. Второй вариант подойдёт, если ученик интерисуется 3д графикой.
Вы можете использовать JNI, чтобы использовать хвостовую рекурсию и ФП, которое есть в С++. Странен хейт в сторону явы, когда есть JNI, позволяющий писать часть проекта на компилируемом языке, например С++.
Документация функций нужна практически во всех случаях, когда код разбивается на несколько файлов, и время его разработки превышает неделю.
Документация функций и классов позволяет вернуться к старому проекту за несколько часов. Указание параметов, исключений, связанных классов ускоряет понимание роли функции в проекте.
Комментарии в самом коде я оставлю на усмотрение разработчика. Они могут быть нужны в случае for(int i = 0; i < arr.length;), где возникает вопрос, почему значение i не обновляется. Константы в коде тоже должны содержать комментарии, например значения по умолчанию и/или описание поведения при их изменении.
Таково моё субъективное мнение про комментирование, интересно узнать ваше.
Я пробовал GeoGebra. В браузере она тормозит, некорректно парсит формулы, например ||x|-1| (\left|\left|x\right|-2\right|), не везде работает Ctrl+Z. Поэтому я выбрал Desmos. Единственное чем GeoGebra лучше Desmos'a лично для меня — возможностью строить трёхмерные уравнения.
Пусть проиндексирует. Ради исчерпывающего автодополнения я готов подождать. Особенно это касается С++, так как все UB и best practices не упомнить.
Я предпочту чтобы в IDE был и гит, и работа с БД, и SSH, и поддержка всех языков, которые я использую в проекте.
Вы правы, стихи у меня не получаются. Программист не обязан быть Пушкиным, но развивать себя всесторонне я считаю необходимым. Возможно, в следующий раз стихи получатся лучше. Тренировка - это множество повторений до получения абсолютного успеха.
Нейросетевое творчество в статье - только картинка, текст придуман и написан человеком, без привлечения AI.
Визуал приятный, генерация контента-заглушки для прототипа - это отличная ниша, которую заняли сетки.
На телефоне игра не работает. Выдаёт 1 кадр раз в 1-1.5 секунд, задержка на клик по экрану секунд 5 на флагмане прошлого года.
Благодарю! Вы решили мою проблему за 5 минут, без VPN и долгих путей.
А - Алгоритм, самое базовое при программировании.
Интересно было прочитать. Единственный вопрос: зачем искусственно менять то, что уже хорошо работает? Каков прок от нагрева Титана?) Жизнь может быть не белковой с комфортной температурой +25°, потребностью в воде и кислороде, а какой-нибудь другой, для которой лучшие условия - те, который сейчас есть на Титане.
Чтобы подготовить экспедицию на Титан для начала нужно решить задачу полёта через 8а.а., чтобы у космонавтов хватило воды, еды, воздуха, etc., чтобы они смогли вернуться с Титана обратно. После решения этого -180° на Титане едва ли станет причиной чтобы его нагреть.
MySQL, PostgreSQL, MongoDB, Redis, Cassandra:
- Мы для тебя какая-то шутка?
Честные дженерики потребуют изменения структуры jvm, что приведёт к отказу от обратной совместимости. Если очень нужно разделять List<A> от List<B> и менять архитектуру нельзя/невозможно, то решением будет наследование от списка с реализацией метода Class getElementClass().
Так ли часто нужен unsigned? На практике редко.
Для unsigned int есть Integer.compareUnsigned(a, b), и другие функции. То же для остальных примитивов.
Кому любопытно,
Это
Код Грея
Приятно видеть попытки разобраться в линейной алгебре на плоскости, это поможет не только в разработке игр, но и при создании разметки изображений.
А теперь расскажу о простом для понимания, но несколько дорогом для cpu (задействуется извлечение корня) алгоритме о пересечении отрезков. Поехали.
Первым делом зададим точки A, B, C, D на двумерной плоскости, А и В задают первый отрезок, C и D - второй.
Основная идея - привести систему к вырожденному случаю, когда точка А' имеет координаты (0, 0), а точка В' лежит на оси ОХ.
Первым делом вычтем из точек В, С и D точку А, так мы достигнем первого условия. Теперь нужно повернуть точки С и D вокруг точки А (точку В поворачивать не нужно, её координаты будут (length(A, B), 0)). Для этого воспользуемся матрицей поворота, для неё нужны синус и косинус угла линии AB, благо их легко вычислить, зная длину AB и расстояние по оси ОХ и ОY между точками А и В.
После умножения точек С и D на матрицу поворота мы получим С' и D' в локальных координатах отрезка АВ.
Задача о пересечении становится тривиальной:
Точки С' и D' с разных сторон оси ОХ, или одна из точек близка к отрезку А'В' на некоторую эпсилон.
Теперь когда точки С' и D' с разных сторон оси ОХ мы можем найти точку пересечения С'D' и ОХ:
Найдем расстояние по ОХ между С' и D' (cdLy)
Найдём параметр alpha, поделив координату Y точки С' на расстояние по OY точек С' и D'.
Найдём координату X точки М' (пересечение), помножив cdLy на alpha. Координата X должна оказаться больше или равна 0 и меньше или равна длине АВ, в противном случае отрезки не пересекаются.
Вернём точку М' в мировое пространство, помножив её на инверсную матрицу поворота (в данном случае нужно всего лишь поменять знаки). По факту здесь можно умножить кординату X точки М' на синус и косинус угла линии АВ.
После этого к точке М нужно прибавить координаты точки А.
Весьма долгий путь, зато общий. Так можно найти расстояние от отрезка до точки (а заодно самую ближайшую точку на отрезке к заданной точке), то же можно провернуть с лучом или линией, приведя их к форме отрезка и убрав проверки на ось ОY и/или длину АВ.
Подобный подход можно использовать для пересечения отрезка и треугольника в трёхмерном пространстве. В таком случае пусть треугольник будет АВС, а отрезок DE. Аналогично нужно из точек B, C, D и Е отнять точку А и помножить на матрицу треугольника АВС (тангент - сторона АВ, нормаль - векторное произведение АВ и АС, битангент - тангент х нормаль, получится матрица TBN. Все вектора T, B, N нужно нормализовать). После этого задача опять тривиальна: точка А' лежит в начале координат, точка В' на оси ОХ, а точка С' выше оси ОХ. Найти точку пересечения в этом случае тривиально, описывать не стану.
IMHO, автоматическую генерацию коммитов можно реализовать через поиск убранных "//TODO:" и "//fixme:" и добавленных. Это можно было бы объединить с багтрекером, или issue.
Только до тех пор, пока вместо списка не окажется numpy array, который в случае a = np.asarray([1,2,3]) * 3 выдаст [3, 6, 9].
В этом и минус питона при обучении - скрытость типов данных. На мой взгляд, лучше начинать с С++, Java, любого другого языка, где типы данных указываются явно и нет перегрузки операторов "из коробки".
Такую простую 2д анимацию в питоне лучше сделать через pygame. Если нужно что-то мощнее - DirectX/OpenGL. Второй вариант подойдёт, если ученик интерисуется 3д графикой.
Вы можете использовать JNI, чтобы использовать хвостовую рекурсию и ФП, которое есть в С++. Странен хейт в сторону явы, когда есть JNI, позволяющий писать часть проекта на компилируемом языке, например С++.
Согласен с вами про
Документация функций нужна практически во всех случаях, когда код разбивается на несколько файлов, и время его разработки превышает неделю.
Документация функций и классов позволяет вернуться к старому проекту за несколько часов. Указание параметов, исключений, связанных классов ускоряет понимание роли функции в проекте.
Комментарии в самом коде я оставлю на усмотрение разработчика. Они могут быть нужны в случае
for(int i = 0; i < arr.length;), где возникает вопрос, почему значение i не обновляется. Константы в коде тоже должны содержать комментарии, например значения по умолчанию и/или описание поведения при их изменении.Таково моё субъективное мнение про комментирование, интересно узнать ваше.
Я пробовал GeoGebra. В браузере она тормозит, некорректно парсит формулы, например ||x|-1| (\left|\left|x\right|-2\right|), не везде работает Ctrl+Z. Поэтому я выбрал Desmos. Единственное чем GeoGebra лучше Desmos'a лично для меня — возможностью строить трёхмерные уравнения.