easy.math.qsp v. 3.1.0
Операции над шестнадцатеричными числами
em.hex.inDec
Функция перевода из гексаметричного числа в декаметричное. Не работает с отрицательными значениями.
Использует циклический алгоритм перевода, в связи с чем может заметно подвешивать игру при переводе больших чисел. Имеет те же ограничения на значение результата, что и прочие фукции, т.е. результат должен лежать в пределе [-2147483647 ... 2147483647] (для Q.S.P. 5.8.0).
$args[
- шестнадцатеричное число (текстовое значение). Значения в пределе 0
]7fffffff
result
- полученное число
Результат работы функции:
@em.hex.inDec('22') & !@ 34
@em.hex.inDec('10') & !@ 16
@em.hex.inDec('1') & !@ 1
@em.hex.inDec('a') & !@ 10
@em.hex.inDec('ffaa233') & !@ 268083763
@em.hex.inDec('ffaa23') & !@ 16755235
@em.hex.inDec('ffaa2') & !@ 1047202
@em.hex.inDec('ffaa233451') & !@ -1440533423
@em.hex.inDec('ffaa23345') & !@ -90033339
@em.hex.inDec('ffaa2334') & !@ -5627084
Как видно, последние три результата получились отрицательными, значит превышены пределы значений результата, а соответственно и числа, которые переводятся в десятеричную систему тоже превышают предел.
em.hex.add
Функция складывает два шестнадцатеричных числа.
$args[0
]
- шестнадцатеричное число (текстовое значение).
$args[1
]
- шестнадцатеричное число (текстовое значение).
Результат работы функции:
em.dec.inHex
Функция перевода из декаметричного числа в гексаметричное. Не работает с отрицательными значениями.
Использует циклический алгоритм перевода, в связи с чем может заметно подвешивать игру при переводе больших чисел. Имеет ограничения на значения аргумента в пределе [-2147483647 ... 2147483647] (для Q.S.P. 5.8.0). Аргумент, превышающий предел, приводится к максимально возможному в QSP значению.
args[
- целое число (числовой вид). Значения в пределе 2147483647
0
] $result
- полученная строка
Результат работы функции:
@em.dec.inHex(214) & !@ 'd6'
@em.dec.inHex(255) & !@ 'ff'
@em.dec.inHex(10) & !@ 'a'
@em.dec.inHex(9) & !@ '9'
@em.dec.inHex(2147483648) & !@ '7fffffff'
em.dec.inCol
Преобразует десятеричное число в шестнадцатеричное. Отличием от функции em.dec.inHex
является ограничение на значение аргумента в пределах [-255 ... 255]. Если пределы превышены, функция выдаёт в результат ff
. Любое число в пределах преобразуется к двуразрядному шестнадцатеричному числу. Таким образом ограничение на результат лежит в пределах [-ff
... ff
].
args[
- число целое, десятеричное.
0
] $result
- шестнадцатеричное двуразрядное число (текстовое значение).
Результат работы функции:
@em.dec.inCol(214) & !@ 'd6'
@em.dec.inCol(255) & !@ 'ff'
@em.dec.inCol(-10) & !@ '-0a'
@em.dec.inCol(256) & !@ 'ff'
@em.dec.inCol(16) & !@ '10'
em.col.add
Функция предназначена для изменения цвета для HTML; использует функции em.hex.inDec
и em.dec.inCol
.
$args[
- цвет. Шестнадцатеричный формат, шестизначное число. (не может быть отрицательным)
0
]$args[
- значение. Шестнадцатеричный формат, двузначное число. (может быть отрицательным)
1
]
Функция действует следующим образом: разбивает первый аргумент на три двузначных шестнадцатеричных числа, и к каждому из чисел прибавляет второй аргумент. Если сумма превышает значение ff
, она приводится к ff
. И напротив, если сумма оказывается меньше 0
, она приводится к 0
. Таким образом результат работы функции лежит в пределах [000000
... ffffff
]
Это может пригодиться для плавного гашения цвета, или наоборот. Функция используется в движке игры "МАГИКОН"
, чтобы гасить цвета заголовков в зависимости от уровней.
Результат работы функции:
@em.col.add('000000','-44') & !@ '000000'
@em.col.add('dd0000','22') & !@ 'ff2222'
@em.col.add('dd8822','-44') & !@ '994400'
@em.col.add('dd8822','44') & !@ 'ffcc66'
@em.col.add('dd882299','44') & !@ 'ffcc6699' - составляющая альфаканала не затрагивается
em.col.inRGB
Данная функция преобразует цвет, записанный в шестнадцатеричной форме, в числовой код цвета, понятный QSP; использует функцию em.hex.inDec
.
$args[
- цвет. Шестнадцатеричный формат, шестизначное число. (не может быть отрицательным);0
]
result
- числовой код цвета в формате QSP.
Функция является как бы надстройкой системной функции rgb
и работает следующим образом: шестнадцатеричный код цвета разбивается на три двузначных шестнадцатеричных числа, которые преобразуются в десятеричные числа и передаются функции rgb
в качестве аргументов.
Если в качестве аргумента указать неверное шестнадцатеричное число, функция всё равно вернёт результат, заменив неверные символы нулями. То же самое произойдёт, если указать отрицательное шестнадцатеричное число. Минус будет считаться неизвестным символом и em.hex.inDec
заменит его на ноль. Последняя цифра будет отсечена.
Результат работы функции:
@em.col.inRGB('000000') & !@ '-16777216'
@em.col.inRGB('dd0000') & !@ '-16776995'
@em.col.inRGB('dd8822') & !@ '-14513955'
@em.col.inRGB('ffmm00') & !@ '0'
@em.col.inRGB('-0000ff') & !@ '0'
@em.col.inRGB('238c9088') & !@ '-2003792861' — альфа-канал поддерживается
em.col.inv
Возвращает шестнадцатеричный код цвета противоположного указанному; использует функцию em.col.add
.
$args[
- цвет. Шестнадцатеричный формат, шестизначное число. (не может быть отрицательным)
0
]
Принцип работы прост. Берётся максимальное значение для цветовой составляющей, и из него вычитается соответствующее значение цветовой составляющей исходного цвета. Полученные результаты склеиваются, в результате — цвет противоположный исходному.
Результат работы функции:
В качестве результата работы функции наглядная таблица исходных цветов и противоложных им.
Исходный | Противоположный |
#000000 | #ffffff |
#ffffff | #000000 |
#238c90 | #dc736f |
#902b10 | #6fd4ef |
#c7c000 | #383fff |
#07c701 | #f838fe |
!@ альфаканал не затрагивается. Инвертируются только цвета:
Исходный | Противоположный |
#c7c00084 | #383fff84 |
#07c7014d | #f838fe4d |
Aleks Versus'Easy Libraries'2013-2025
Aleks Versus'Game Adventure Making'Really Unimaginable Stories'2013-2025