mix2

Syntax

int mix2(int a, int b, int n, int d)

Arguments

a
An integer value to be mixed in.
b
An integer value for the base value.
n
An integer value which controls the mixture.
d
An integer value for the range.

Return

An integer which is a mix of a into b, based on the position of n in range [0,d].

Description

This function calculates how much of a will be mixed into b, proportional to the position of n in the range from 0 to d. If n is 0, the value of b is returned, if n is equal to d, the value of a is returned. For any values of n in between 0 and d, a proportional value is calculated.

This version of the mix function uses a slightly different algorithm, of the form (d == 0) ? 0 : (b - a)*n >= 0 ? b - ((b - a)*n*2 + d)/(2*d) : b + ((a - b)*n*2 + d)/(2*d) ;

Example

%ffp

ctl[0]: "Darken", Range=(0,100)
ctl[1]: COMBOBOX, "mix\nmix1\nmix2", Val=0, Size=(*,60)

ForEveryTile: {
  for (y = y_start; y < y_end; y++) {
    for (x = x_start; x < x_end; x++) {
       for (z=0; z < 3; z++) {
          switch(ctl(1)) {
            case 0: 
              pset(x,y,z, mix(0, src(x,y,z), ctl(0), 100) );
              break;
            case 1: 
              pset(x,y,z, mix1(0, src(x,y,z), ctl(0), 100) );
              break;
            case 2: 
              pset(x,y,z, mix2(0, src(x,y,z), ctl(0), 100) );
              break;
            default: 
              pset(x,y,z, mix(0, src(x,y,z), ctl(0), 100) );
          }
       }
    }
  }
  return true;
}

See Also

scl, mix, mix1