2013-04-29 5 views
0

특정 개체를 그리는 화면에 많은 입자가 있습니다. 차가운 그라디언트 효과를 만들기 위해 다음 줄을 사용합니다.값 범위에 인덱스 할당

float factor = (i - 0.0f)/(positions.Count - 0.0f); 

이 값을 1과 0 사이의 값으로 조정하여 색상의 강도를 변경합니다. 이제는 입자가 서로 겹쳐져 전체 색상처럼 보일 것이므로이 기능은 쓸모 없게됩니다. 나는 수행하여 세부적으로 조정하려고 :

for (int i = 0; i < 1000; i++) 
{ 
    Color color = Color.Red * 0.9f; /* factor going down in increments of 0.1f/
} 

를 그렇게 보이는 그런 : 이제

(color * incrementalFactor) * factor 

가 복사이 계속해서 또 다시, 나는 보이는 함수를 만들려면 붙여 반복 얻을 수 있기 때문에 이 같은 :

Color[] colorTable = new Color[] { 
     Color.Red, Color.Blue, Color.Green 
    }; 

    Color getColor(int i, int max) 
    { 
     int maxIndices = max/colorTable.Length; // the upper bound for each color 
     /* Somehow get a color here */ 
    } 

내 문제는 내가 동적으로 지정된 인덱스의 난을 기반으로 COLORTABLE에 인덱스로 값을 축소하는 방법을 모른다, 그리고 주어진 최대 (즉, positions.Count)

즉, maxIndices보다 작 으면 0, maxIndices보다 크면 maxIndices * 2보다 작아야하며 최대 값까지 올라야합니다. 어떻게해야합니까?

EDIT

명확성을 위해 다른 표현을 식 : A I가 주어지며, 소정의 최대 : I는 두 개의 입력을 취하는 기능을 갖는다

. 나는 항상 최대보다 작다.

함수 내에서 max를 상수로 나눔으로써 단계를 얻습니다 (3). 함수는 단계와 관련된 i의 값에 따라 0에서이 상수로 값을 반환해야합니다. 예를 들어

다음 최대 말하면 1,000

f(200, 1000) = 0 
f(400, 1000) = 1 
f(600, 1000) = 2 
f(800, 1000) = 3 

,

step = 1000/3 
if (i < step) return 0 
if (i >= step && i < step * 2) return 1 

아이디어는 임의의 입력에 따라이를 수행 할 수있는 함수를 작성하도록되어 있었다면.

+0

모든 알파 값을 30 % -50 % 정도로 설정하면 어떻게됩니까? –

+0

'Color color = Color.Red * 0.9f; '에서 루프 변수가 사용되지 않습니다. – basarat

+0

아니요, 1000 회마다 0.1f 씩 감소해야합니다. –

답변

1

보자. 수정 된 질문에 따르면 다음과 같이 작동해야합니다.

private int step = 3; 
int StepDivider (int value, int maximum) { 
    return value/(maximum/step); 
}