在Java中镜像指定域之间的数字

时间:2013-07-13 09:00:33

标签: java loops math

我需要用Java语言对一个已知域(边界是代数数字)进行镜像。

域名介于这两个数字之间,其中50是镜像(必须排除50,50 = 50)!镜像需要在两个方向上(参见示例)。

0 ________ 50 ________ 100

我想要实现的是这个

例如:

double x = 20; //x is my input number
double mirrorX = newnumber_mirrored; //mirrorX is the number mirrored in the specified domain, so if the x is 20, the output must be 80.

//other examples:
//input x = 45, output = 55
//input x = 48, output = 52
//input x = 50, output = 50
//input x = 50.1, output = 49.9
//input x = 67.4, output 32.6

如何在Java中实现这一目标?可以是1或2个小数的精度,也可以是完全精确的。

1 个答案:

答案 0 :(得分:5)

double x = 20; //x is my input number
double mirrorX = 100 - x;

或者,通常,对于域a ... b

double x = 45;
double a = 30;
double b = 100;
double mirrorX = (a + b) - x; // => 85

如何到达那里:

我们的号码安排如下:

a             mirror      x      b

mirror位于ab之间,所以:mirror = (a + b) / 2

我们希望镜像xmirror的距离相同,但在另一个方向。到mirror的距离为(x - mirror),我们可以将x表示为mirror + (x - mirror)。改变方向导致mirror - (x - mirror),我们想要的结果,现在可以转换:

x_mirrored = mirror - (x - mirror)
x_mirrored = mirror - x + mirror
x_mirrored = 2 * mirror - x
x_mirrored = 2 * ((a + b) / 2) - x
x_mirrored = (a + b) - x