http://kldp.org/node/112110
허리도 아프고 퇴근시간도 거의 다 되었고 해서 잠시 생각해 보았다.
at + bsin(ct) = d
bsin(ct) = d - at
sin(ct) = (d - at) / b
Therefore, |(d-at)/ b| <= 1
-1 <= (d - at)/b <= 1
if b>0
-b <= d - at <= b
-b + d <= at <= b + d
if a>0
(-b + d)/a <= t <= (b + d)/a
여기서 f(t) = at + bsin(ct) -d 라고 하고
N 개로 잘라내서 f(t) 의 부호가 바뀌는 걸 확인한다면,
전체 길이가 (b + d)/a - (-b + d)/a = 2b /a
따라서 단위 t 의 길이는 ( 2b / a )/N
Java 로 만든 코드
몇몇 결과
(a, b, c, d) = (1, 1, 1, 1) 이고 N 이 10 이라면
a 1.000000 b 1.000000 c 1.000000 d 1.000000
F(0.000000)= -1.000000
F(0.200000)= -0.601331
F(0.400000)= -0.210582
F(0.600000)= 0.164642
F(0.800000)= 0.517356
F(1.000000)= 0.841471
F(1.200000)= 1.132039
F(1.400000)= 1.385450
F(1.600000)= 1.599574
F(1.800000)= 1.773848
F(2.000000)= 1.909297
따라서 대충 0.4 ~ 0.6 사이에 있을 듯.
좀 더 정확히 하기 위해 N 을 100 으로 했더니
... 생략
F(0.480000)= -0.058221
F(0.500000)= -0.020574
F(0.520000)= 0.016880
F(0.540000)= 0.054136
... 생략
고로 대충 0.5xx 인 것 처럼 보인다.
하나 더,
(a, b, c, d) = (1, 2, 3, 4) 이고 N 이 20 이라면
a 1.000000 b 2.000000 c 3.000000 d 4.000000
F(2.000000)= -2.558831
F(2.200000)= -1.176917
F(2.400000)= -0.012664
F(2.600000)= 0.597087
F(2.800000)= 0.509198
F(3.000000)= -0.175763
F(3.200000)= -1.148654
F(3.400000)= -1.999749
F(3.600000)= -2.361872
F(3.800000)= -2.038657
F(4.000000)= -1.073146
F(4.200000)= 0.267246
F(4.400000)= 1.584147
F(4.600000)= 2.487391
F(4.800000)= 2.731316
F(5.000000)= 2.300576
F(5.200000)= 1.415507
F(5.400000)= 0.455156
F(5.600000)= -0.175134
F(5.800000)= -0.185319
F(6.000000)= 0.498026
이건 대충 2.4~2.5 와 2.8 ~ 3.0, 그리고 4.0 ~ 4.2, 5.4 ~ 5.6, 5.8 ~ 6.0 사이에 있겠구만.
Posted by eoh
Calc.java

