我需要用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个小数的精度,也可以是完全精确的。
答案 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
位于a
和b
之间,所以:mirror = (a + b) / 2
我们希望镜像x
与mirror
的距离相同,但在另一个方向。到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