Треугольная тригонометрия (ActionScript 3)

До появления спецификации 5-го издания метод Date.parse был полностью зависимым от реализации (new Date(string) эквивалентен Date.parse(string) кроме последнего возвращает число, а не Date). В спецификации 5-го издания было добавлено требование о поддержке упрощенного (и немного неправильного) ISO-8601 , но кроме этого было требование no для того, что Date.parse / new Date(string) должны принять иное, чем то, что они должны были принять любой вывод Date # toString (не сказав, что это было).

Как и в ECMAScript 2017 (издание 8), реализации необходимо было проанализировать их вывод для Дата # toString и Дата # toUTCString , но формат этих строк не был указан.

Начиная с ECMAScript 2019 (версия 9) формат для Дата # toString и Дата # toUTCString указана как (соответственно):

  1. ddd MMM DD YYYY HH: mm: ss ZZ [(имя часового пояса)] например Вт 10 июля 2018 18:39:58 GMT + 0530 (IST)
  2. ddd, DD MMM YYYY HH: mm: ss Ze.g. Вт 10 июл 2018 13:09:58 GMT

предоставление еще 2 форматов, которые Date.parse должны корректно анализировать в новых реализациях (отмечая, что поддержка не является вездесущей и несовместимые реализации будут оставаться в использовании в течение некоторого времени).

Я бы рекомендовал, чтобы строки даты обрабатывались вручную, а конструктор даты Date использовался с аргументами года, месяца и дня, чтобы избежать двусмысленность:

// parse a date in yyyy-mm-dd format
function parseDate(input) {
  var parts = input.split('-');
  // new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]])
  return new Date(parts[0], parts[1]-1, parts[2]); // Note: months are 0-based
}

7
задан Neysor 29 March 2012 в 23:54
поделиться

4 ответа

То, в чем Вы нуждаетесь, является этим:

var h:Number = Math.sqrt(x*x + y*y);
var z:Number = Math.atan2(y, x);

, Который должен дать Вам угол в радианах, Вы, возможно, должны были бы подкачать x/y и возможно добавить или удалить 90 градусов, но это должно добиться цели! (Обратите внимание, что Вам даже не нужно h для получения z при использовании atan2)

, я использую умножение вместо Math.pow () просто, потому что Математика является довольно медленной, можно сделать:

var h:Number = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));

И это должно быть точно то же.

6
ответ дан 6 December 2019 в 23:16
поделиться

z эквивалентен 180 - угол yH. Или:

180 - arctan(x/y) //Degrees
pi - arctan(x/y) //radians

кроме того, если математические библиотеки actionscript имеют его, arctan2 использования, который берет и X и Y и соглашения со знаками правильно.

4
ответ дан 6 December 2019 в 23:16
поделиться

Угол, который Вы хотите, совпадает с углом, настроенным против одного wetween y и h.

Позволяют нам звонить a угол между y и h, угол, который Вы хотите, на самом деле 180 - a или PI - a в зависимости от Вашей единицы (градусы или радианы).

Теперь геометрия говорит нам что:

cos(a) = y/h
sin(a) = x/h
tan(a) = x/y

Используя загар (), мы добираемся:

a = arctan(x/y)

, Поскольку мы ищем 180 - a, необходимо вычислить:

180 -  arctan(x/y)
1
ответ дан 6 December 2019 в 23:16
поделиться

Какой сказанный @Patrick, также гипотенуза sqrt(x^2 + y^2).

0
ответ дан 6 December 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: