E..5 サンプル

以下のプログラムは http://nalab.mind.meiji.ac.jp/~mk/labo/howto/glsc-progs/に置いてあります。


/*
 * testdensity.c --- g_density_plot_color() のテスト
 *   GLSCWIN が必要です。
 *   桂田研パソコンならば glscd testdensity.c でコンパイル可能
 */

#include <stdio.h>
#define G_DOUBLE
#include <glsc.h>

#define N (100)

double pi;

double f(double x, double y)
{
  return sin(pi * x) * sin(pi * y);
}

int main()
{
  double xmin, xmax, ymin, ymax, w_margin, h_margin, w_width, w_height;
  G_REAL u[N+1][N+1];
  int i, j, n, nx, ny;
  double x, y, dx, dy;

  nx = ny = N;
  pi = 4 * atan(1.0);

  /* 矩形領域を定める */
  xmin = -1.0; xmax = 1.0; ymin = -1.0; ymax = 1.0;
  /* ウィンドウのサイズ */
  w_margin = 1.0; h_margin = 1.0; w_width = 100.0; w_height = 100.0;
  /* GLSC の開始 */
  g_init("DENSITY", w_width + 2 * w_margin, w_height + 2 * h_margin);
  g_device(G_BOTH);
  /* 座標系を決める */
  g_def_scale(0,
              xmin, xmax, ymin, ymax,
              w_margin, h_margin, w_width, w_height);
  g_sel_scale(0);
  /* 格子点上での関数値の計算 */
  dx = (xmax - xmin) / nx;
  dy = (ymax - ymin) / ny;
  for (i = 0; i <= nx; i++) {
    x = xmin + i * dx;
    for (j = 0; j <= ny; j++) {
      y = ymin + j * dy;
      u[i][j] = f(x,y);
    }
  }
  /* */
  g_density_plot_color((G_REAL *)u, nx + 1, ny + 1, 0, nx, 1, 0, ny, 1,
                       G_NO, G_NO,
                       xmin, xmax, ymin, ymax,
                       -1.0, 1.0);
  g_sleep(-1.0);
  g_term();
  return 0; // もしマウス・クリックだけで終了したいのならば exit(0); とする。
}



桂田 祐史