2017-05-21 4 views
0

저는 수학에별로 좋지 않습니다. 무작위 데이터를 생성하려고 시도했지만 어떻게 할 수 있는지 알 수 없었습니다.무작위 데이터를 생성하는 수학 함수

[1: 10], [2: 14], [3: 20], [4: 18], 
[5: 22], [6: 33], [7: 62], [8: 51], 
[9: 89], [10: 27], [11: 13], [12: 56] 

것은 명확히하려면 : 그들 모두 무작위이 내가 100에 0을 보여 (12 개) 막대를 생성 할하지만 싶어하지 않는다, 나는 다음과 같이 멋진 곡선 결과에 그 중 일부를 가지고 싶습니다 :

- 편집 (1)

값은 같은 그림으로 아래로 곡선처럼 올라갈 것 :

파단 지점 어디서든 일어날 수있다 .

너무 많이 묻는다면 나에게 올바른 방향을 보여주세요. 나는 혼자 생각할 것입니다.

미리 감사드립니다.

+0

여러 가지 방법이 있습니다 "각 막대는 이전의 것들에 의존 할 수는." 그러나 그 단락의 나머지 부분은 의미가 없습니다. 명확히하십시오. –

+0

명확히하기 위해 이미지를 추가했습니다. – PRAISER

+0

기울기가 균일 한 일련의 값을 만들 수 있습니까? 지그재그를 만들기 위해 몇 번 연속해서 할 수 있습니까? 사면과 길이를 무작위로 만들 수 있습니까? 각 막대에 작은 무작위 값을 추가하여 덜보기 좋게 보이게 할 수 있습니까? 당신이 할 수없는 첫 번째 부분은 무엇입니까? – Beta

답변

1

나는 임의 곡선을 생성하는 것입니다 후 바로 같은 막대를 보간 : 당신이 x(i) ...

필요하지 않습니다

  1. n 컨트롤 포인트

    x(i)=i; 
    y(i)=100.0*Random(); 
    

    을 생성

  2. m > n

    그래서 그냥 베 지어 또는 다른 다항식 곡선의 제어점으로 n 포인트를 사용하고 ... 사용하여 간단한 경우를 가정 해 봅시다 동안 줄을 계산 n=4cubic 한 다음 다항식으로 변환됩니다 제어 지점 :

    i={0,1,2,3,...,m-1} 
    t=i/(m-1); // this converts i to t=<0,1> 
    bar(i) = a0 + a1*t +a2*t^2 + a3*t^3 
    
    이 가 bar(i)을 고정하는 것을 잊지 마세요 것은 그래서하지 01,231,809을 초과

    :

    y(t) = a0 + a1*t +a2*t^2 + a3*t^3 
    

    지금처럼 각 막대의 크기를 계산. 이렇게하면 바처럼 부드러운 랜덤 커브가 생성됩니다. 내가 함께이 모든 것을 넣으면

나는 C++에서이 같은 작업을 수행 할 수는 오타를 포함 할 수 있도록

double d1,d2,y0,y1,y2,y3,a0,a1,a2,a3,t; 
// n=4 random control points for cubic 
y0=100.0*Random(); 
y1=100.0*Random(); 
y2=100.0*Random(); 
y3=100.0*Random(); 
// convert them to interpolation cubic 
d1=0.5*(y2-y0); 
d2=0.5*(y3-y1); 
a0=y1; 
a1=d1; 
a2=(3.0*(y2-y1))-(2.0*d1)-d2; 
a3=d1+d2+(2.0*(-y2+y1)); 
// compute m bars 
const int m=10; 
double bar[m]; int i; 
for (i=0;i<m;i++) 
{ 
t=double(i)/double(m-1); 
bar[i] = a0 + a1*t +a2*t*t + a3*t*t*t; 
if (bar[i]<0.0) bar[i]=0.0; 
if (bar[i]>100.0) bar[i]=100.0; 
} 

코드가 바로 여기에 기록 안된이다. 막대가 3 차 곡선을 따라 가면서 모든 요구를 충족시켜야합니다 ... 더 많은 범프 다항식 및 조각 별 보간을 사용할 수 있습니다. 더 많은 정보를 참조 :

+0

모든 것에 대해 감사드립니다. – PRAISER