문제

현재 나는 다양한 급성 (또는 민감도)을 적용하기 위해 시설을 추가 해야하는 통제권이 있습니다. 문제는 이미지로 가장 잘 설명됩니다.

그래프 http://img87.imageshack.us/img87/7886/control.png

보시다시피, 나는 임의의 한계가 100 인 X와 Y 축이 있습니다.이 설명에 충분해야합니다. 현재 제어 제어는 빨간색 선 (선형 동작)이지만 다른 3 개의 곡선 (또는 그 이상)의 능력을 추가하고 싶습니다. 즉, 컨트롤이 더 민감한 경우 설정은 선형 설정을 무시하고 하나를 찾습니다. 세 줄의. 출발점은 항상 0이고 종점은 항상 100입니다.

지수가 너무 가파르지만 앞으로 나아갈 길을 찾을 수는 없다는 것을 알고 있습니다. 제안이 있습니까?

도움이 되었습니까?

해결책

당신이 설명한 곡선은 많이 보입니다 감마 보정 곡선. 범위의 최소값과 최대 값은 입력과 동일하게 유지되지만 중간은 그래프에서 가지고있는 것처럼 구부러져 있습니다 (내가 주목할 수도 있습니다. ~ 아니다 코사인 구현에서 얻을 원형 아크).

그래픽으로 다음과 같이 보입니다.

alt text
(원천: wikimedia.org)

그래서, 그 영감으로, 여기 수학이 있습니다 ...

X 값이 0에서 1까지의 경우 기능이 다소 간단합니다.

y = f(x, gamma) = x ^ gamma

스케일링에 Xmax 값을 추가하면 (예 : x = 0 ~ 100) 기능이 다음과 같습니다.

y = f(x, gamma) = ((x / xmax) ^ gamma) * xmax

또는 대안으로 :

y = f(x, gamma) = (x ^ gamma) / (xmax ^ (gamma - 1))

0이 아닌 Xmin을 추가하려면이 단계를 더 나아갈 수 있습니다.

감마가 1이면 선은 항상 완벽하게 선형입니다 (y = x). X가 1 미만인 경우 곡선이 위로 구부러집니다. X가 1보다 크면 곡선이 아래쪽으로 구부러집니다. 감마의 상호 값은 값을 원래 (x = f (y, 1/g) = f (f (x, g), 1/g)로 다시 변환합니다.

자신의 취향과 적용 요구에 따라 감마의 가치를 조정하십시오. 사용자에게 "민감도 향상"에 대한 여러 옵션을 제공하고 싶기 때문에, 사용자에게 -4 (가장 민감한)에서 4 (가장 민감한)에서 4 (가장 민감한)까지의 선형 스케일로 사용자를 선형으로 선택할 수 있습니다. ), 전력 기능으로 내부 감마 값을 확장하십시오. 즉, 사용자에게 (-4, -3, -2, -1, 0, 1, 2, 3, 4)의 선택을 제공하지만 (5.06, 3.38, 2.25, 1.50, 1.00의 감마 값으로 번역하십시오. , 0.67, 0.44, 0.30, 0.20).

C#에서 코딩하는 코딩은 다음과 같이 보일 수 있습니다.

public class SensitivityAdjuster {
    public SensitivityAdjuster() { }
    public SensitivityAdjuster(int level) {
        SetSensitivityLevel(level);
    }
    private double _Gamma = 1.0;
    public void SetSensitivityLevel(int level) {
        _Gamma = Math.Pow(1.5, level);
    }
    public double Adjust(double x) {
        return (Math.Pow((x / 100), _Gamma) * 100);
    }
}

이를 사용하려면 새 감도를 만들고 사용자 기본 설정 (생성자 또는 메소드 사용, -4 ~ 4는 아마도 합리적인 레벨 값일 수 있음)에 따라 감도 레벨을 설정하고 조정 된 출력 값을 얻으려면 조정 (x)을 호출하십시오. . 더 넓거나 좁은 범위의 합리적인 레벨을 원한다면 SetSensitivityLevels 방법에서 1.5 값을 줄이거 나 증가시킵니다. 물론 100은 최대 x 값을 나타냅니다.

다른 팁

나는 당신의 요구 사항을 캡처하는 간단한 공식을 제안합니다. 극단적 인 경우 전체 "쿼터 서클"을 갖기 위해 (1-cos((x*pi)/(2*100)))*100.

내가 제안한 것은 y = x와 y = (1-cos ((x*pi)/(2*100)))*100 사이의 가중 평균을 취한다는 것입니다. 예를 들어, 선형 (99% 선형)에 매우 가까이 있으려면 다음을 수행하십시오.

y = 0.99*x + 0.01*[(1-cos((x*pi)/(2*100)))*100]

또는 더 일반적으로 선형성 수준이 L이고 간격이 [0, 1]에 있다면, 공식은 다음과 같습니다.

y = L*x + (1-L)*[(1-cos((x*pi)/(2*100)))*100]

편집 : 변경했습니다 cos(x/100) 에게 cos((x*pi)/(2*100)), COS 결과가 [1,0] x 범위에 있으므로 [0,1]이 아닌 [0, pi/2] 범위에 있어야하기 때문에 초기 실수에 대해 죄송합니다.

당신은 아마 같은 것을 찾고있을 것입니다 다항식 보간. 2 차/입방/쿼트 픽 보간은 질문에서 보여주는 곡선의 종류를 제공해야합니다. 당신이 보여주는 세 곡선의 차이점은 계수를 조정함으로써 만 달성 될 수 있습니다 (간접적으로 가파른 것을 결정 함).

그래프 y = x^p ~을 위한 x 0에서 1까지는 당신이 원하는대로 원하는 것을 할 것입니다. p 1에서 (빨간색 선을 줄 것) 위쪽으로. 처럼 p 곡선을 증가시킵니다. p 정수 일 필요는 없습니다.

(0 ~ 100을 얻으려면 확장해야하지만 작업 할 수 있다고 확신합니다)

한 가지 수정으로 Rax Olgud의 일반적인 아이디어에 투표합니다.

y = alpha * x + (1-alpha)*(f(x/100)*100)

Alt Text http://www4c.wolframalpha.com/calculate/msp/msp4501967d41e1aga1b3i00004bdeci2b6be2a59b?mspstoretype=Image/gif&s=6

여기서 f (0) = 0, f (1) = 1, f (x)는 초자형이지만,이 "쿼터 서클"아이디어가 어디에서 왔는지 또는 1-cos (x)가 좋은 선택이되는 이유는 모르겠습니다. .

F (x) = x를 제안합니다케이 여기서 k = 2, 3, 4, 5, 무엇이든, 당신에게 & alpha = 0에 대한 원하는 degre의 가파른 정도를 제공하는 것은 무엇이든 K의 값을 고정 숫자로 선택한 다음 특정 곡선을 선택할 수 있도록 α를 변경하십시오.

이와 같은 문제의 경우, 곡선에서 몇 가지 점수를 얻고 곡선 피팅 프로그램을 통해 던질 것입니다. 거기에 많은 사람들이 있습니다. 7 일 무료 평가판이 있습니다.

나는 다른 모델을 시도함으로써 많은 것을 배웠습니다. 종종 당신은 곡선에 가까워 지도록 매우 간단한 표현을 얻을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top