コッホ曲線

三角関数、円周率、複素数等一切使わないコッホ曲線描画プログラムです!
(実装依存コードを含みます)

三角関数、円周率、複素数等一切使わないコッホ曲線描画プログラムです!
(実装依存コードを含みます)

  • タグ:
  • タグはありません
#include <cstdint>

#include <GL/glut.h>


static_assert(sizeof(double) == 8, u8"this program assumes that double is represented using binary64, IEEE 754 double-precision binary floating-point format");


constexpr double Size = .8;

const uint64_t _vertices[] = {
  0x3C91A62633145C07, 0x3FF0000000000000, 0x3FA06C22E8802D71, 0x3FEE38E38E38E38E, 0x3FB8A2345CC04426, 0x3FEE38E38E38E38D, 0x3FB06C22E8802D6C, 0x3FEC71C71C71C71C,
  0x3FB8A2345CC04420, 0x3FEAAAAAAAAAAAAA, 0x3FC4872BA2A038C7, 0x3FEAAAAAAAAAAAA9, 0x3FC8A2345CC04425, 0x3FEC71C71C71C71A, 0x3FCCBD3D16E04F7E, 0x3FEAAAAAAAAAAAA9,
  0x3FD279A74590331A, 0x3FEAAAAAAAAAAAA8, 0x3FD06C22E8802D6C, 0x3FE8E38E38E38E36, 0x3FD279A745903319, 0x3FE71C71C71C71C4, 0x3FCCBD3D16E04F7B, 0x3FE71C71C71C71C5,
  0x3FC8A2345CC0441E, 0x3FE5555555555554, 0x3FCCBD3D16E04F78, 0x3FE38E38E38E38E2, 0x3FD279A745903318, 0x3FE38E38E38E38E1, 0x3FD06C22E8802D69, 0x3FE1C71C71C71C70,
  0x3FD279A745903316, 0x3FDFFFFFFFFFFFFC, 0x3FD694AFFFB03E72, 0x3FDFFFFFFFFFFFFB, 0x3FD8A2345CC04421, 0x3FE1C71C71C71C6F, 0x3FDAAFB8B9D049CD, 0x3FDFFFFFFFFFFFF9,
  0x3FDECAC173F05528, 0x3FDFFFFFFFFFFFF8, 0x3FE06C22E8802D6C, 0x3FE1C71C71C71C6D, 0x3FDECAC173F0552B, 0x3FE38E38E38E38DF, 0x3FE172E517083043, 0x3FE38E38E38E38DF,
  0x3FE279A74590331B, 0x3FE5555555555550, 0x3FE38069741835F2, 0x3FE38E38E38E38DE, 0x3FE58DEDD1283BA0, 0x3FE38E38E38E38DD, 0x3FE4872BA2A038C8, 0x3FE1C71C71C71C6C,
  0x3FE58DEDD1283B9E, 0x3FDFFFFFFFFFFFF4, 0x3FE79B722E38414C, 0x3FDFFFFFFFFFFFF3, 0x3FE8A2345CC04424, 0x3FE1C71C71C71C6B, 0x3FE9A8F68B4846FA, 0x3FDFFFFFFFFFFFF1,
  0x3FEBB67AE8584CA7, 0x3FDFFFFFFFFFFFF0, 0x3FEAAFB8B9D049D0, 0x3FDC71C71C71C70D, 0x3FEBB67AE8584CA6, 0x3FD8E38E38E38E29, 0x3FE9A8F68B4846F9, 0x3FD8E38E38E38E2A,
  0x3FE8A2345CC04422, 0x3FD5555555555546, 0x3FE9A8F68B4846F8, 0x3FD1C71C71C71C62, 0x3FEBB67AE8584CA6, 0x3FD1C71C71C71C61, 0x3FEAAFB8B9D049CF, 0x3FCC71C71C71C6FC,
  0x3FEBB67AE8584CA6, 0x3FC5555555555535, 0x3FE9A8F68B4846F8, 0x3FC5555555555535, 0x3FE8A2345CC04421, 0x3FBC71C71C71C6DE, 0x3FE79B722E38414A, 0x3FC5555555555536,
  0x3FE58DEDD1283B9C, 0x3FC555555555553A, 0x3FE4872BA2A038C5, 0x3FBC71C71C71C6E8, 0x3FE58DEDD1283B9C, 0x3FAC71C71C71C6B1, 0x3FE38069741835EE, 0x3FAC71C71C71C6B6,
  0x3FE279A745903316, 0xBCC0000000000000, 0x3FE38069741835EC, 0xBFAC71C71C71C75F, 0x3FE58DEDD1283B9A, 0xBFAC71C71C71C769, 0x3FE4872BA2A038C3, 0xBFBC71C71C71C73F,
  0x3FE58DEDD1283B9A, 0xBFC5555555555567, 0x3FE79B722E384148, 0xBFC555555555556A, 0x3FE8A2345CC04420, 0xBFBC71C71C71C74A, 0x3FE9A8F68B4846F6, 0xBFC555555555556C,
  0x3FEBB67AE8584CA3, 0xBFC555555555556F, 0x3FEAAFB8B9D049CC, 0xBFCC71C71C71C735, 0x3FEBB67AE8584CA2, 0xBFD1C71C71C71C7E, 0x3FE9A8F68B4846F5, 0xBFD1C71C71C71C7E,
  0x3FE8A2345CC0441D, 0xBFD555555555555F, 0x3FE9A8F68B4846F4, 0xBFD8E38E38E38E43, 0x3FEBB67AE8584CA2, 0xBFD8E38E38E38E44, 0x3FEAAFB8B9D049CA, 0xBFDC71C71C71C727,
  0x3FEBB67AE8584CAB, 0xBFDFFFFFFFFFFFFD, 0x3FE9A8F68B4846FD, 0xBFDFFFFFFFFFFFFD, 0x3FE8A2345CC04426, 0xBFE1C71C71C71C70, 0x3FE79B722E384150, 0xBFDFFFFFFFFFFFFD,
  0x3FE58DEDD1283BA2, 0xBFDFFFFFFFFFFFFD, 0x3FE4872BA2A038CB, 0xBFE1C71C71C71C70, 0x3FE58DEDD1283BA2, 0xBFE38E38E38E38E2, 0x3FE38069741835F4, 0xBFE38E38E38E38E2,
  0x3FE279A74590331D, 0xBFE5555555555553, 0x3FE172E517083046, 0xBFE38E38E38E38E1, 0x3FDECAC173F05530, 0xBFE38E38E38E38E1, 0x3FE06C22E8802D6F, 0xBFE1C71C71C71C70,
  0x3FDECAC173F05531, 0xBFDFFFFFFFFFFFFC, 0x3FDAAFB8B9D049D6, 0xBFDFFFFFFFFFFFFC, 0x3FD8A2345CC04428, 0xBFE1C71C71C71C70, 0x3FD694AFFFB03E7A, 0xBFDFFFFFFFFFFFFC,
  0x3FD279A74590331E, 0xBFDFFFFFFFFFFFFC, 0x3FD06C22E8802D70, 0xBFE1C71C71C71C70, 0x3FD279A74590331D, 0xBFE38E38E38E38E2, 0x3FCCBD3D16E04F83, 0xBFE38E38E38E38E1,
  0x3FC8A2345CC04426, 0xBFE5555555555553, 0x3FCCBD3D16E04F80, 0xBFE71C71C71C71C5, 0x3FD279A74590331C, 0xBFE71C71C71C71C6, 0x3FD06C22E8802D6D, 0xBFE8E38E38E38E37,
  0x3FD279A74590331A, 0xBFEAAAAAAAAAAAA9, 0x3FCCBD3D16E04F7D, 0xBFEAAAAAAAAAAAA9, 0x3FC8A2345CC04420, 0xBFEC71C71C71C71B, 0x3FC4872BA2A038C6, 0xBFEAAAAAAAAAAAA9,
  0x3FB8A2345CC04422, 0xBFEAAAAAAAAAAAA8, 0x3FB06C22E8802D69, 0xBFEC71C71C71C71A, 0x3FB8A2345CC0441D, 0xBFEE38E38E38E38C, 0x3FA06C22E8802D60, 0xBFEE38E38E38E38B,
  0xBCA8000000000000, 0xBFEFFFFFFFFFFFFC, 0xBFA06C22E8802D88, 0xBFEE38E38E38E38A, 0xBFB8A2345CC04432, 0xBFEE38E38E38E38A, 0xBFB06C22E8802D7C, 0xBFEC71C71C71C719,
  0xBFB8A2345CC04434, 0xBFEAAAAAAAAAAAA7, 0xBFC4872BA2A038D1, 0xBFEAAAAAAAAAAAA7, 0xBFC8A2345CC0442E, 0xBFEC71C71C71C719, 0xBFCCBD3D16E04F88, 0xBFEAAAAAAAAAAAA7,
  0xBFD279A745903320, 0xBFEAAAAAAAAAAAA7, 0xBFD06C22E8802D73, 0xBFE8E38E38E38E35, 0xBFD279A745903321, 0xBFE71C71C71C71C3, 0xBFCCBD3D16E04F8A, 0xBFE71C71C71C71C3,
  0xBFC8A2345CC0442E, 0xBFE5555555555552, 0xBFCCBD3D16E04F8A, 0xBFE38E38E38E38E0, 0xBFD279A745903320, 0xBFE38E38E38E38E0, 0xBFD06C22E8802D73, 0xBFE1C71C71C71C6F,
  0xBFD279A74590331A, 0xBFDFFFFFFFFFFFFA, 0xBFD694AFFFB03E76, 0xBFDFFFFFFFFFFFFA, 0xBFD8A2345CC04424, 0xBFE1C71C71C71C6F, 0xBFDAAFB8B9D049D1, 0xBFDFFFFFFFFFFFFA,
  0xBFDECAC173F0552C, 0xBFDFFFFFFFFFFFFA, 0xBFE06C22E8802D6D, 0xBFE1C71C71C71C6F, 0xBFDECAC173F0552D, 0xBFE38E38E38E38E1, 0xBFE172E517083044, 0xBFE38E38E38E38E0,
  0xBFE279A74590331B, 0xBFE5555555555552, 0xBFE38069741835F2, 0xBFE38E38E38E38E0, 0xBFE58DEDD1283BA0, 0xBFE38E38E38E38E0, 0xBFE4872BA2A038C9, 0xBFE1C71C71C71C6F,
  0xBFE58DEDD1283BA0, 0xBFDFFFFFFFFFFFF9, 0xBFE79B722E38414E, 0xBFDFFFFFFFFFFFF9, 0xBFE8A2345CC04425, 0xBFE1C71C71C71C6E, 0xBFE9A8F68B4846FC, 0xBFDFFFFFFFFFFFF9,
  0xBFEBB67AE8584CA9, 0xBFE0000000000003, 0xBFEAAFB8B9D049D2, 0xBFDC71C71C71C722, 0xBFEBB67AE8584CA9, 0xBFD8E38E38E38E3F, 0xBFE9A8F68B4846FB, 0xBFD8E38E38E38E3F,
  0xBFE8A2345CC04425, 0xBFD555555555555C, 0xBFE9A8F68B4846FC, 0xBFD1C71C71C71C79, 0xBFEBB67AE8584CAA, 0xBFD1C71C71C71C79, 0xBFEAAFB8B9D049D3, 0xBFCC71C71C71C72B,
  0xBFEBB67AE8584CAA, 0xBFC5555555555564, 0xBFE9A8F68B4846FC, 0xBFC5555555555563, 0xBFE8A2345CC04425, 0xBFBC71C71C71C738, 0xBFE79B722E38414E, 0xBFC5555555555563,
  0xBFE58DEDD1283BA0, 0xBFC5555555555562, 0xBFE4872BA2A038C9, 0xBFBC71C71C71C736, 0xBFE58DEDD1283BA0, 0xBFAC71C71C71C752, 0xBFE38069741835F2, 0xBFAC71C71C71C750,
  0xBFE279A74590331C, 0xBCB8000000000000, 0xBFE38069741835F3, 0x3FAC71C71C71C6EA, 0xBFE58DEDD1283BA1, 0x3FAC71C71C71C6EB, 0xBFE4872BA2A038CA, 0x3FBC71C71C71C702,
  0xBFE58DEDD1283BA1, 0x3FC5555555555548, 0xBFE79B722E38414F, 0x3FC5555555555548, 0xBFE8A2345CC04426, 0x3FBC71C71C71C704, 0xBFE9A8F68B4846FC, 0x3FC5555555555549,
  0xBFEBB67AE8584CAA, 0x3FC5555555555549, 0xBFEAAFB8B9D049D3, 0x3FCC71C71C71C710, 0xBFEBB67AE8584CAA, 0x3FD1C71C71C71C6B, 0xBFE9A8F68B4846FD, 0x3FD1C71C71C71C6C,
  0xBFE8A2345CC04426, 0x3FD555555555554E, 0xBFE9A8F68B4846FD, 0x3FD8E38E38E38E31, 0xBFEBB67AE8584CAB, 0x3FD8E38E38E38E31, 0xBFEAAFB8B9D049D4, 0x3FDC71C71C71C714,
  0xBFEBB67AE8584CAB, 0x3FDFFFFFFFFFFFF8, 0xBFE9A8F68B4846FD, 0x3FDFFFFFFFFFFFF8, 0xBFE8A2345CC04426, 0x3FE1C71C71C71C6E, 0xBFE79B722E384150, 0x3FDFFFFFFFFFFFF9,
  0xBFE58DEDD1283BA2, 0x3FDFFFFFFFFFFFF9, 0xBFE4872BA2A038CB, 0x3FE1C71C71C71C6E, 0xBFE58DEDD1283BA2, 0x3FE38E38E38E38E0, 0xBFE38069741835F4, 0x3FE38E38E38E38E0,
  0xBFE279A74590331E, 0x3FE5555555555552, 0xBFE172E517083047, 0x3FE38E38E38E38E0, 0xBFDECAC173F05532, 0x3FE38E38E38E38E0, 0xBFE06C22E8802D70, 0x3FE1C71C71C71C6F,
  0xBFDECAC173F05531, 0x3FDFFFFFFFFFFFFA, 0xBFDAAFB8B9D049D6, 0x3FDFFFFFFFFFFFFA, 0xBFD8A2345CC04428, 0x3FE1C71C71C71C6F, 0xBFD694AFFFB03E7A, 0x3FDFFFFFFFFFFFFB,
  0xBFD279A74590331C, 0x3FDFFFFFFFFFFFFA, 0xBFD06C22E8802D6E, 0x3FE1C71C71C71C6F, 0xBFD279A74590331C, 0x3FE38E38E38E38E1, 0xBFCCBD3D16E04F82, 0x3FE38E38E38E38E0,
  0xBFC8A2345CC04426, 0x3FE5555555555552, 0xBFCCBD3D16E04F82, 0x3FE71C71C71C71C4, 0xBFD279A74590331C, 0x3FE71C71C71C71C4, 0xBFD06C22E8802D6F, 0x3FE8E38E38E38E35,
  0xBFD279A74590331D, 0x3FEAAAAAAAAAAAA7, 0xBFCCBD3D16E04F83, 0x3FEAAAAAAAAAAAA7, 0xBFC8A2345CC04428, 0x3FEC71C71C71C719, 0xBFC4872BA2A038CC, 0x3FEAAAAAAAAAAAA7,
  0xBFB8A2345CC0442A, 0x3FEAAAAAAAAAAAA8, 0xBFB06C22E8802D74, 0x3FEC71C71C71C71A, 0xBFB8A2345CC0442C, 0x3FEE38E38E38E38C, 0xBFA06C22E8802D7A, 0x3FEE38E38E38E38C,
};

constexpr size_t NumVertices = sizeof(_vertices) / 8;

const auto vertices = reinterpret_cast<const double*>(_vertices);


// 表示部分をこの関数で記入
void display() {
  glClearColor(1.0, 1.0, 1.0, 1.0);   // 消去色指定
  glClear(GL_COLOR_BUFFER_BIT);       // 画面消去

  /* ここに描画に関するプログラムコードを入れる */
  glColor3d(0., 0., 0.);
  glBegin(GL_LINE_LOOP);
  for (size_t i = 0; i < NumVertices; i += 2) {
    glVertex2d(vertices[i] * Size, vertices[i + 1] * Size);
  }
  glEnd();

  glFlush();  // 画面出力
}


// メインプログラム
int main(int argc, char* argv[]) {
  glutInit(&argc, argv);          // ライブラリの初期化
  glutInitWindowSize(400, 400);   // ウィンドウサイズを指定
  glutCreateWindow(argv[0]);      // ウィンドウを作成
  glutDisplayFunc(display);       // 表示関数を指定
  glutMainLoop();                 // イベント待ち
  return 0;
}