Save Me!

The following function is -supposed- to move a pixel along a vector from the current point to the origin a little way.

Variables and array's and all that are fine, what the problem is, is the -equation- for moving the point.

What's supposed to happen is:

A point's X and Y distances from the origin are found, then the distance of the point directly from the origin is calculated using SQRT( DX*DX + DY*DY),

The X length and Y length are then reduced to single units by dividing DX and DY by the distance between the origin and the pixel.

Then the new distance is calulated by adding a small amount (can be negative) to the current distance.

Then the X and Y unit values are multiplied by the new distance value to find the co-ordinates of the translated pixel to be used instead of the pixel found at that point.

It should work, but the effect the following code generates produces is to move a pixel that should only move on the X direction (as the x pixel is in aline with the x origin) a little on the Y position too.

What on earth is going on? why does the pixel on the X origin's plane move on the Y too, and why does the same happen for Y?

It -must- be the equation, but I can't see what the problem is!

HELP!

void generateBumpAndBaseImage()

{

int currentPixel=0;

int dx=-((windowX/2)+centerX),dy=-((windowY/2)+centerY),rx=0,ry=0,mainPixel,dry,targetX=0,targetY=0,tempX,tempY,distX,distY;

float sx,sy,smy,scaler,distance,xVector,yVector,newDistance;

consta+=3;

for(int y=dy;y<dy+windowY;targetY++,y++)

{

//**lighting**

sy=y/40f;

smy=(sy*sy)+consta;

//**texture**

distY=(targetY-centerY);

dry=distY*distY;

targetX=0;

for(int x=dx;x<dx+windowX;targetX++,x++)

{

//**lighting**

sx=x/40f;

logo.imageA[currentPixel]=(int)(((Math.sin(((sx*sx)+consta)+smy)*128)+128)/depth);

//**texture**

distX=(targetX-centerX);

//Find the distance current pixel is away from origin

distance=(float)(Math.sqrt((distX*distX)+dry));

//Find the unit x and y values of the pixel from the origin

xVector=distX/distance;

yVector=distY/distance;

//Create new distance using bumpmap information as the alteration

newDistance=distance+(float)((logo.imageA[currentPixel]-128f)/10f);

//Move from the origin to the offset pixel

tempX=(int)(xVector*newDistance)+centerX;

tempY=(int)(yVector*newDistance)+centerY;

//Check the new pixel is in bounds

if(tempX<0) tempX=0;

if(tempX>windowX) tempX=windowX;

if(tempY<0) tempY=0;

if(tempY>windowY-2) tempY=windowY-2;

//Map the X,Y co-ordinates onto the array

mainPixel=tempX+(tempY*windowX);

//Store translated pixel in the image array

logo.imageR[currentPixel]=baseTexture.imageR[mainPixel];

logo.imageG[currentPixel]=baseTexture.imageG[mainPixel];

logo.imageB[currentPixel]=baseTexture.imageB[mainPixel];

currentPixel++;

}

}

}

site: http://www.untamed.co.uk