Pixi.js: Переработайте API, использующие радианы, чтобы вместо этого использовать градусы.

Созданный на 30 июн. 2017  ·  10Комментарии  ·  Источник: pixijs/pixi.js

Заявленные преимущества:

  • Легче использовать API конечного пользователя
  • Легче рассуждать и читать пользовательский код
  • Легче сохранять значения в градусах, а не в радианах
  • Более совместим с другими веб-и другими 2D-движками
Stale 🙏 Feature Request

Самый полезный комментарий

Может, как у Phaser? Угол указывается в градусах, а вращение - в радианах.

Все 10 Комментарий

Несколько минусов, которые приходят на ум:

  • встроенные математические функции JavaScript стандартизированы по радианам
  • встроенные функции glsl стандартизированы по радианам
  • радианы - более удобный формат для работы с некоторыми типами вычислений (например, я могу lerp от 0-> Math.pi * 2 и получить полный поворот по часовой стрелке.)

Я математик и предпочитаю использовать градусы либо 0..1, либо 0..512 из-за устойчивости и формата шейдера. Если бы вы задали мне тот же вопрос два или более года назад, я бы сказал, что радианы лучше, потому что они «чистые» в математическом смысле.

Однако хранение 2 x Math.PI в файлах представляет собой проблему (постоянство), и "360" просто быстрее записывается, чем 2 * PI, это не может быть четко представлено в двоичной форме.

Движки на базе Flash работают в основном со степенями:

https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/Sprite.html#getRotation -

http://cocos2d-x.org/docs/programmers-guide/sprites/index.html

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7def.html

https://www.youtube.com/watch?v=zAsDbHXlFWI

Также редакторы, такие как Spine, работают и хранят углы в радианах.

Еще одна странность заключается в том, что мы используем SKEW, который является предметом графического дизайнера и просто "(shear.y, -shear.x)" в математическом смысле, мы позволяем такой мерзости и заставляем пользователя одновременно использовать rads.

Это конфликт между «низкоуровневым рендерером» и «рендерером 2-мерной графики с собственной сценой и поддержкой инструментов», и я думаю, что pixi ближе ко второму.

@englercj Я тоже должен работать над этим кодом, у меня уже есть что-то подобное в моей вилке: https://github.com/gameofbombs/gobi/tree/master/src/core/transform
https://github.com/gameofbombs/gobi/blob/master/src/core/math/FlatTransform2d.ts

@mreinstein Я тоже должен попросить взглянуть на этот код, так как вы кое-что знаете о преобразованиях pixi;)

Предложения от @bigtimebuddy и @GoodBoyDigital , сделайте API настраиваемым:

// useDegrees
CONVERSION = Math.PI / 180;

// useRadiens
CONVERSION = 1;

set rotation(rot)
{
    this._rotation = rot * CONVERSION;
}

Может, как у Phaser? Угол указывается в градусах, а вращение - в радианах.

@englercj Согласен. Это самый простой способ. Двигатели, основанные на pixi, могут просто исправить свою константу «КОНВЕРСИЯ».

@englercj Processing делает это, и я считаю, что это действительно плохое дизайнерское решение. Больно модульность. Если у вас есть один фрагмент кода, который делает что-то одним способом, и вы пытаетесь использовать другой фрагмент кода (возможно, в библиотеке), который предполагает другой способ, это не сработает. Если вы убедитесь, что вы установили режим единицы измерения перед каждым вызовом функции, связанной с углом, это может гарантировать, что ваш код работает, но нарушит код библиотеки. И если есть фрагмент кода библиотеки, который использует углы, должен ли он устанавливать режим угла? Это может гарантировать, что его код работает так, как задумано, но нарушает код пользователя. Это почти похоже на дилемму узника дизайна API.

@OSUblake Это кажется более разумным. Хотя названия «угол» и «вращение» явно не обозначают и не запрещают единицу, здесь определенно есть ассоциации, которые делают это более разумным, чем предположение 50/50.

Я думаю, что angleDeg и angleRad были бы лучше. Почему бы не сделать это явным?

Угол указывается в градусах, а вращение - в радианах.

Возможно, именно так это делает фазер, но это не единодушно. вращение - это действие, а угол - это количество произошедшего действия. Иногда его называют «углом поворота». Таким образом, технически угол или поворот могут быть перегружены, чтобы относиться к одному и тому же, и могут быть выражены в любой единице (градусах или радианах).

Любые математические операции, связанные с вращением, намного проще выполнять с радианами. Это действительно не так сложно понять; Math.PI находится на полпути по кругу; Math.PI * 2 - это полный оборот.

Единственная подходящая временная шкала - это когда вы показываете людям визуальный пользовательский интерфейс, который включает вращение, а ваша аудитория - это группа, которая не понимает базовой геометрии (то есть большинство людей).

Я понимаю, что это мнение, но просто соглашусь с радианами. Все математические API в javascript работают с радианами, а не с градусами, как и большинство неигровых библиотек геометрии.

Если мы действительно должны поддерживать всех во всем, я согласен с @ 1j01, чтобы сделать это явным. Может быть, .degrees или .radians ?

Эта проблема была автоматически помечена как устаревшая, поскольку в последнее время не было активности. Он будет закрыт, если больше не будет активности. Спасибо за ваш вклад.

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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги