하나의 최소 \ 최대 세트에서 다른 최소 \ 최대 세트로 숫자를 변환하는 방법은 무엇입니까? [닫은]


19

지형 생성을하고 있는데 -1과 +1 사이의 난수를 제공하는 펄린 라이브러리가 있습니다. 이것을 0-255의 스케일로 변환하고 싶습니다. 이를 수행하는 올바른 방법은 무엇입니까?

답변:


23

기본 공식은 다음과 같습니다.

Result := ((Input - InputLow) / (InputHigh - InputLow))
          * (OutputHigh - OutputLow) + OutputLow;

너의 경우:

결과 : = (( 입력 - -1 ) / ( 1 - -1 ) * ( 255 - 0 ) + 0 ;

여기에서 계수가 정적 인 경우 변환을 최적화 할 수 있지만 컴파일러가 자체적으로 수행 할 수도 있습니다.

결과 : = (( 입력 - -1 ) / 2 ) * 255 + 0 ;

결과 : = 입력 * 127.5 + 127.5 ;


2
이 답변은 프로그래머의 두뇌에 가장 적합했습니다. :) 다른 사람들에게 "감사합니다"라고 대답합니다.
Thraka

10

범위 -1로는 1총 범위이다 2. 따라서에 맞게 확장해야합니다 255. 이 같은:

(randomPerlin + 1.0) * 127.5

먼저 추가 그래서 1,에 도착하는 0..2다음 곱셈과 127.5의 범위를 얻을 수0..255


3

스케일링과 바이어스의 힘을 통해.

값에서 범위의 최소값을 뺍니다. [0..2] 범위의 값을 제공합니다.

소스 범위의 너비로 나누면 [0..1] 범위의 값이됩니다.

목표 범위의 너비에 곱하면 [0..255] 범위의 값이됩니다.

목표 범위의 기준을 추가하여 목표 범위의 값을 얻습니다.이 경우 이전 단계와 동일합니다.

요약해서 말하자면:

            (v - (-1.0)) 
v' = 0 + ---------------- * (255 - 0)
          (1.0 - (-1.0))

3
oldRange = oldMax - oldMin
newRange = newMax - newMin

newValue = ((oldValue - oldMin) * newRange / oldRange) + newMin

도움이 되었기를 바랍니다.


2

입력 범위를 번역 하여 1 (최소 입력의 음수 값) -1 .. 1-> 0을 추가하여 최소값을 0으로 만듭니다. 2

출력 범위가 0으로 시작하므로 아무것도하지 마십시오.

출력 범위에 맞도록 새 입력 범위를 조정하십시오. 이제 둘 다 0으로 시작하기 때문에 쉽습니다. 값에 255/2 0..2 * 2/255-> 0..255를 곱하십시오.

끝난!

예:

0.5가 이동 : (0.5 + 1) * 127.5 = 191.25 -0.5가 이동 : (-0.5 + 1) * 127.5 = 63.75


2

말할 수는 x원래의 입력 및 y출력이 예상된다. 우리는 적어도 두 점이 있습니다 (x, y) (-1, 0) (1, 255)

우리는 선형 보간 을하고 싶기 때문에 우리 는 형태 방정식을 볼 수 있습니다 y = m*x + c

위의 두 점을 통해 풀 수 있습니다. m그리고 c 일단 완료되면 변환 방정식을 얻습니다.

이 방법은 다른 유형의 방정식에도 적용됩니다. 예를 들어 지수 또는 2 차 보간을 원할 경우.


이 분야에서 선형 보간 의 일반적인 의미는 다음과 같이 혼합 계수를 사용하여 두 수량 사이에 선형으로 혼합하는 것 v = (1-a)*x + (a)*y입니다. 그가 원하는 것은 범위 매핑이기 때문에이 답변이 묻는 질문과 얼마나 관련이 있는지 알 수 없습니다.
라스 비클 런드

것은 평면에서 두 점이 고유하게 선을 정의한다는 것입니다. 범위 매핑을 직선으로 취급 할 수 있습니다. 우리는 그 선에 두 가지 점을 알고 있습니다. 해결하면 선 방정식이 제공됩니다. 선형 보간이 올바른 단어는 아니지만이 선의 두 점 사이에 내부 점 세트를 의미하고 싶었습니다.
Ankush
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.