我需要使用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个小数的精度,也可以是全精度。

最佳答案

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

关于java - 在指定域之间镜像Java中的数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17628620/

10-11 15:18