2013-07-13 2 views
0

Мне нужно сделать зеркалирование известного домена (границы являются алгебраическими числами) на языке Java.Зеркалирование числа в 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

Используйте тот факт, что '50 - х = mirrorX - 50'. Используйте «BigDecimal», если вам нужна полная точность. – johnchen902

+3

Вы изучаете * алгебру *? – devnull

+1

Позор мне. Я не думал, что это может быть так просто. Во-первых, я был замешан в десятичной точности и обратном порядке. Итак, я согласен с тобой - мне нужно снова пройти курс алгебры. –

ответ

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 
+0

Это не будет легче. – Ingo

+0

Хотя это может показаться простым и очевидным кодом, есть числа, для которых эта арифметика не будет работать. Т.е. x plus mirrorX не будет равно 100. – Bohemian

+0

Спасибо, сэр, ты был бы хорошим учителем. Если вы уже не :). –

Смежные вопросы