2011-01-22 6 views
0

Android에서 제작중인 Java 응용 프로그램에서 알파 값을 변조하려고합니다. 지금은 이렇게 가고 :라인의 숫자를 사인 곡선에서 모듈화하는 방정식을 어떻게 변경합니까?

rateOfChange이 maxAlpha보다 클 수 없습니다 임의의 int이며
if (goingUp) { 
    newAlpha = oldAlpha + rateOfChange; 
    if (newAlpha > maxAlpha) { 
     newAlpha = maxAlpha; 
     goingUp = false; 
    } 
} else { 
    newAlpha = oldAlpha - rateOfChange; 
    if (newAlpha < minAlpha) { 
     newAlpha = minAlpha; 
     goingUp = true; 
    } 
} 

. 방정식은 스레드의 모든 틱을 평가하며 시간과 무관합니다.

주어진 변수 + Math.PI 및 다른 수학 요소를 사용하는 방법이 있습니까 (저는 Math.Sine이 거기에있을 것이라고 가정합니다) newAlpha를 사인 (Sine)의 숫자로 만들 수 있습니까?

나는 min과 max가 wave의 앰프가되고 rateOfChange가 사인 함수의 곱일 것이라고 생각하고 있습니다. 어떻게 모든 것이 하나로 연결되는지 알 수 없습니다.

답변

1

등식은 다음과 같을 것이다 :

alt text

y는 시간 t에서의 수직 위치이고, A는 진폭 f는 주파수이고,이고, t는 시간 (또는 안드로이드 클록 틱).

+0

이 올바른 방향으로 날을 가리키는 것입니다. 감사. – prodaea

0

왜 이것을 고려하지 않습니까? 클래스 정의의 상단에

...

는 다음과 같습니다 : -

import java.lang.*; 

이 ... 그리고 함수 내에서, newAlpha에 할당 한 후,

newAlpha = Math.sin(newAlpha%(2*Math.PI)); 

당신이 좋아하면 newAlpha가 죄() 함수로서 범위 [-1,1] 판정하면 내 ...

OR

이다

newAlpha에 할당 한 후 함수,

newAlpha = Math.asin(newAlpha%3 - 1); 

당신이 좋아하면 newAlpha가 죄() 함수 범위 [-1,1]에 있어야하는 것은 어떤 데이터 형 잘 모르겠어요

입니다 귀하의 newAlpha하지만,이 식에 대한 답변에 영향을 미치지 않습니다 가정 할거야 - newAlpha은 double 타입입니다.

일반적으로 특정 범위 내에서 숫자를 가져 와서 사용자가 가지고있는 식에 계수를 적용하는 방법입니다. expr % N은 [0, N-1] 범위의 숫자를 생성합니다.

희망이 도움이됩니다.

+0

데이터 형식은 Paint.setAlpha (int)로 int이며 범위는 [0,255]이므로 범위를 [-1,1]에서 [0,255] (으)로 수정하고 싶습니다. oldAlpha도 사용하셨습니까? – prodaea

0

Duffymo의 일반 방정식을 토대로 필자는 TI-83 일 (문자 그대로 휴대 전화에 응용 프로그램 넣기)으로 되돌아 가야했습니다. 이 같은 찾고 결국 그래서하지만 모두 함께 조각을 넣어 수 있었다 :

newAlpha = (int)((alphaMax - alphaMin) * 0.5 * Math.sin(rateOfChange * ticks + randomPhaseOffset) + (alphaMin + (alphaMax - alphaMin) * 0.5)) 

FMI : http://en.wikipedia.org/wiki/Sine_wave