• ## How to Scale any two given points into [0,1]

CatheriBurbank Member

Doing a project I got stuck with this. I have to implement a method that gets any two given points ( x, y) and scales them between [0,1]

I been trying to many different ways, I even browsed other site but I still don’t understand. This is the formula other sites used to scale it down, but I doesn’t seem to work

Code: Select all

`(x-min)/(max - min)`

This is my Example

``` double max = 1;
double low = 0;

double x = 50;
double y = 100;

double newPointX = (x-low)/(max-low);
double newPointY = (y-low)/(max-low);

System.out.println(newPointX);
System.out.println(newPointY);

```

I tried do my own example where my Point is (50,100), so generally this should be scaled down to “[0,1]” but it doesn’t work. Can any one help with this small algorithm.

• ShikhaTan Member
```x-low: 50 - 0 = 50
max-low: 1-0 = 1
newpointx = 50/1 = 50
```

I guess it doesn’t work! I believe the max/min that the original formula refers to is the min / max of the original points 50/100. With that hint you should be able to complete the assignment

• BuckRenard Member

The scaling formula (from your original post) *does* work.

But it will work for the two individual axes – “X” (horizontal) and “Y” (vertical) – individually.

As in, your original point [50,100] really represents an X-value of 50 and an Y-value of 100. To apply the formula, you will have to indicate if these axis share a common scale – in which case, the max value is 100 and min is 50 (or zero) – or if they are separate scales – in which case, for X-axis the max may be 50, whilst for Y-axis may be 100.

Supposing they share a common scale (min=0, max=100): to normalize the X value, apply the formula: (50 – 0) / (100 – 0) » 0.5
Normalizing the Y value, you get 1.0, therefore the point really is [0.5, 1.0]

If you need it to be something else, you will have to muck around with the range values (max and min).

• Abhey Member

I had to create method that obtained the [Max, Min] Points. I feel that the logic to my problem IS my problem. hope that makes sense. Ha

Well, I had several methods that obtain the [Max, Min] of both [X,Y]

```public double getMax(BunchOfObjects points){
double maxX = points.getAll().get(0).getX();
for( Point p : points.getAll()){
if(p.getX() > maxX){
maxX = p.getX();
}
}

return maxX;

}
```

Now, I need a Scale method that is going to work around these points
Can any help me with this method?

```public double  scale(BunchOfObjects points , double x, double y){

double maxX = getMax(points);
double maxY = getMaxY(points);
double minX = getMinX(points);
double minY = getMinY(points);
double dx = maxX - minX;
double dy = maxY -minY;
double scaledx = (x-minX)/dx;
double scaledy = (y-minY)/dy;
```

Now, my question is…What do I return? Sorry, this problem is giving me headaches. and I can’t figure out exactly.

• ShikhaTan Member

Create two different method to ScaleX and ScaleY then set those points in before you actually drew them.