コード例 #1
0
ファイル: rk4.c プロジェクト: mgieles/radio
void rk4(float *r, float *vr, float *J2, float *rp, float *cm,  int N, float dt, float tend)
{
  float kr[4], kv[4];
  float r0, v0, r1;
  for (int i = 0; i<N; ++i)
    {
      float t = 0;
      while (t < tend)
	{
	  r0 = r[i];
	  v0 = vr[i];

	  /* Step 1 */
	  r1 = r0;
	  kr[0] = v0 ; 
	  kv[0] = compute_acc(r1, J2[i], rp, cm, N);

	  /* Step 2 */
	  r1 = r0 + 0.5*dt*kr[0];
	  kr[1] = v0 + 0.5*dt*kv[0];
	  kv[1] = compute_acc(r1, J2[i], rp, cm, N);
	  
	  /* Step 3 */
	  r1 = r0 + 0.5*dt*kr[1];
	  kr[2] = v0 + 0.5*dt*kv[1];
	  kv[2] = compute_acc(r1, J2[i], rp, cm, N);
	  
	  /* Step 4 */
	  r1 = r0 + dt*kr[2];
	  kr[3] = v0 + dt*kv[2];
	  kv[3] = compute_acc(r1, J2[i], rp, cm, N);

	  r[i] = r0  + dt*(kr[0] + 2.0*kr[1] + 2.0*kr[2] + kr[3])/6.0;
	  vr[i] = v0 + dt*(kv[0] + 2.0*kv[1] + 2.0*kv[2] + kv[3])/6.0;
	  t+=dt;
	}
    }
}
コード例 #2
0
ファイル: taiko_ranking_score.c プロジェクト: tomtix/osux
static void trs_prepare_acc(struct tr_score *sc)
{
    double acc = sc->origin->conf->acc;
    if (acc < 0)
        acc = 0;
    else if (acc > MAX_ACC)
        acc = MAX_ACC;

    sc->great = sc->origin->great;
    sc->good  = sc->origin->good;
    sc->miss  = sc->origin->miss;
    sc->acc   = compute_acc(sc->great, sc->good, sc->miss);
    while (sc->acc > acc) {
        double try = compute_acc(sc->great-1, sc->good+1, sc->miss);
        if (try <= acc) {
            sc->great--;
            sc->good++;
            sc->acc = try;
        } else {
            sc->great--;
            sc->miss++;
            sc->acc = compute_acc(sc->great, sc->good, sc->miss);
        }
    }
コード例 #3
0
ファイル: taiko_ranking_score.c プロジェクト: tomtix/osux
static void trs_prepare_ggm(struct tr_score *sc)
{
    int good = sc->origin->conf->good;
    int miss = sc->origin->conf->miss;
    if (good < 0)
        good = 0;
    if (miss < 0)
        miss = 0;

    // Remove exceeding good and miss
    while (good + miss > sc->origin->great) {
        if (good > 0)
            good--;
        else
            miss--;
    }

    sc->great = sc->origin->great - good - miss;
    sc->good  = good;
    sc->miss  = miss;
    sc->acc   = compute_acc(sc->great, sc->good, sc->miss);
}