Как изменить цветовые точки CAGradientLayer?

Оператор ^ в Java

^ в Java является оператором исключительного или («xor»).

Возьмем 5^6 в качестве примера:

(decimal)    (binary)
     5     =  101
     6     =  110
------------------ xor
     3     =  011

Это таблица истинности побитового ( JLS 15.22.1 ) и логического ( JLS 15.22.2 ) xor:

^ | 0 1      ^ | F T
--+-----     --+-----
0 | 0 1      F | F T
1 | 1 0      T | T F

Более просто, вы можете также думать о xor как «это или , но не оба !».

См. также


Экспоненциальность в Java

Что касается целочисленного возведения в степень, к сожалению, Java не имеет такого оператора. Вы можете использовать double Math.pow(double, double) (при необходимости приведя результат к int).

Вы также можете использовать традиционный трюк для смещения бит для вычисления нескольких степеней по два. То есть (1L << k) равно двум k -й степени для k=0..63.

См. Также


Объединить примечание : этот ответ был объединен с другим вопросом, в котором было намерение использовать экспоненциальность для преобразования string "8675309" - int, не используя Integer.parseInt в качестве упражнения программирования (^ теперь означает возведение в степень). Целью OP было вычислить 8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309; в следующей части этого ответа указывается, что для этой задачи не требуется возведение в степень.

blockquote>

Схема Хорнера

. При обращении к вашему конкретному нужно, не нужно вычислять различные степени 10. Вы можете использовать так называемую схему Хорнера , которая не только проста, но и эффективна.

Поскольку вы делаете это как личное упражнение, я не буду давать Java-код, но вот основная идея:

8675309 = 8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0
        = (((((8*10 + 6)*10 + 7)*10 + 5)*10 + 3)*10 + 0)*10 + 9

Сначала это может выглядеть сложным, но на самом деле это не так. Вы в основном читаете цифры слева направо, и вы умножаете свой результат на 10 до добавления следующей цифры.

В виде таблицы:

step   result  digit  result*10+digit
   1   init=0      8                8
   2        8      6               86
   3       86      7              867
   4      867      5             8675
   5     8675      3            86753
   6    86753      0           867530
   7   867530      9          8675309=final
29
задан 4 December 2013 в 23:01
поделиться

1 ответ

Свойства startPoint и endPoint для CAGradientLayer определены в «единичной системе координат». В системе единиц измерения:

  • (0,0) соответствуют наименьшим координатам прямоугольника границ слоя, который в iOS является его верхним левым углом, если слой не был преобразован;
  • (1,1) соответствует наибольшим координатам прямоугольника границ слоя, который в iOS является его правым нижним углом, если слой не был преобразован.

Таким образом, расположение градиента должно быть таким простым:

gradient.startPoint = CGPoint.zero
gradient.endPoint = CGPoint(x: 1, y: 1)
103
ответ дан budidino 4 December 2013 в 23:01
поделиться
Другие вопросы по тегам:

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