• 09-19-2010
TIMBERings
This is a paint like program, where on a click or drag, a circle with certain fills will appear.

I'm having issues with the Quadratic and Gaussian Brushes. Each provide me with a small dot, the QuadraticBush is about 20 pixels in diameter and the GaussianBrush is 1 pixel. Each start with a radius and flow of 128. These are the two functions that create the mask which stores the flow.

They are wrapped in a double for loop holding i as each row and j as each column.

Size is the width and height of the array.
Distance is the distance from the click location to each pixel in the mask.
Flow can be from 0 to 255 and represents the amount of color applied.
Rho is some constant for the Gaussian equation.

Code:

```if( distance <= (double)radius )  {         if (distance < 1) {                 m_mask[i*(size-1)+j] = m_flow;         } else {                 m_mask[i*(size-1)+j] = m_flow / (distance * distance);                 if (m_mask[i*(size-1)+j] > m_flow) {                         m_mask[i*(size-1)+j] = m_flow;                 }         } } else {         m_mask[i*(size-1)+j] = 0; }```

Gaussian:
Code:

```if( distance <= (double)radius )  {         float base = 1 /(2 * PI * rho * rho);         float exponent = -1.0 * ((distance * distance) / (2.0 * rho * rho));         m_mask[i*(size-1)+j] = m_flow * base * exp(exponent);         if (m_mask[i*(size-1)+j] > m_flow) {                 m_mask[i*(size-1)+j] = m_flow;         } } else {         m_mask[i*(size-1)+j] = 0; }```
This is a linear blur which works just fine. It goes from 100% inside and 0% outside.

Linear:
Code:

```        int radius = m_radius;         int size = radius*2 +1;         int count=0;         int arraysize = size * size;         m_mask = new float[arraysize];         double distance;         for(int i=0; i<size; i++) {                 for(int j=0; j<size; j++) {                         distance = sqrt((double)((radius-i)*(radius-i) + (radius-j)*(radius-j)));                         if( distance <= (double)radius )  {                                 m_mask[i*(size-1)+j] = ((radius-distance)/(double)radius) * m_flow;                         } else {                                 m_mask[i*(size-1)+j] = 0;                         }                 }         }```
Any help would be great.