N88-BASICで偏差値の計算(1回目)~(2回目)
標準偏差σと平均mから偏差値の計算
この記事はリニューアルしました
ブログ
https://ulprojectmail.blogspot.com/2021/11/n88-basicsd.html
N88-BASICで標準偏差
N88-BASICで偏差値の計算(1回目)~(2回目)
標準偏差σと平均mから偏差値の計算
この記事はリニューアルしました
ブログ
https://ulprojectmail.blogspot.com/2021/11/n88-basicsd.html
N88-BASICで標準偏差
N88-BASICで順列組合せ(1回目)~(2回目)
nPr,nCrの計算です
この記事はリニューアルしました
ブログ
https://ulprojectmail.blogspot.com/2021/11/n88-basicpc.html
N88-BASICで順列組合せ
N88-BASICで木星と土星の大接近
2020年12月21日(月)~22日(火)ごろ
木星と土星の大接近を見ることができる
そうです
397年ぶりだそうです
プログラムは
https://ulprojectmail.blogspot.com/2022/09/vl-basic-2.html
VL-BASICで惑星の軌道 (2回目)
の日付を変更することで再現できます
プログラムは
https://ulprojectmail.blogspot.com/2021/10/n88-basic-2.html
N88-BASICで天体の軌道 (2回目)
の日付を変更することで再現できます
シダ(HTML, canvas)
HTMLとcanvasで
回転しているように見える
シダを描画しました
Enterキーで元の位置から
再スタートします
HTMLの記事でC(C++)らしき
プログラムが書いてあるのを見ました
varがあったりdoubleなどの型宣言が
ないのでC(C++)ではない様です
まさかHTMLでプログラミング言語が
使えるのか?と思いテキストにコピペ
してWindowsのEdgeで開いてみると
動きました
という事で点の書き方などをネットで
調べてcanvasにたどり着きHTML(canvas)
で初めてのプログラムを作りました
NL-BASIC(VL-BASIC)に添付している
シダを移植してみました
ところで、このHTMLで動くプログラミング
言語は何というのでしょうか
ネットで調べてみましたが
JavaScript?
で良いのでしょうか
それともHTML?
etc21215.zip(leaf.html)は
以下のリンクからダウンロードできます
Readme.txtを読んで遊んで下さい
HTMLが動作するページです
以下をメモ帳などでコピペしてleaf.htmlで保存して
Microsoft EDGEなどのブラウザーに重ねると動くと思います
leaf.html
<!DOctxYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>シダ (ULproject)</title>
</head>
<body>
<p id="leaf"></p>
<script>
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = '640';
canvas.height = '400';
document.body.appendChild(canvas);
function cls(c)
{
ctx.fillStyle = c;
ctx.fillRect(0, 0, canvas.width, canvas.height);
}
function pset(x, y, c)
{
ctx.fillStyle = c;
ctx.fillRect(x, y, 1, 1);
}
function color(c)
{
ctx.fillStyle = c;
ctx.strokeStyle = c;
}
function leaf(d)
{
var x, y, x1, y1, i, r;
cls('#000');
x = 0; y = 0;
for (i = 0; i < 10000; i++)
{
pset(320 + x * 30 * d, 320 - y * 30, '#0f0');
r = Math.random();
if (r < 0.01)
{
x1 = 0;
y1 = y * 0.16
}
else if (r < 0.01+0.07)
{
x1 = x * 0.20 - y * 0.26
y1 = x * 0.23 + y * 0.22 + 1.60
}
else if (r < 0.01+0.07+0.07)
{
x1 = y * 0.28 - x * 0.15
y1 = x * 0.26 + y * 0.24 + 0.44
}
else
{
x1 = x * 0.85 + y * 0.04
y1 = y * 0.85 - x * 0.04 + 1.60
}
x = x1; y = y1;
}
}
var rad = Math.PI * 2;
document.body.addEventListener('keydown', event =>
{
if (event.keyCode == 13)
{
rad = Math.PI * 2;
window.requestAnimationFrame(idle)
}
});
function idle()
{
if (rad < 0) return;
leaf(Math.cos(rad));
color('#fff');
ctx.font = "24px 'MS 明朝'";
ctx.fillText('シダ (Push enter key.)', 0, 24);
rad -= Math.PI / 180 * 2;
window.requestAnimationFrame(idle)
}
idle();
</script>
</body>
</html>
シダ(C、OpenGL、glut)
Windows、C、OpenGL、glutで
シダを描画しました
BASICでは描画過程を見ることが
出来ましたが
Cでは一瞬で描画されるので
リアルタイムで動かすことが
出来ます
'\','/'キーで前進後退
カーソルキーで方向転換
'p'で四角の表示非表示切り替え
'r'で逆回転
enterキー視点のリセット
です
leaf.cをコンパイルには
glut.h, glut32.lib, glut32.dll
が必要です
(昔ダウンロードしたので現在のリンクは
不明です
freeGlutなどが代わりにあるそうです)
glutはv-syncがオンにならなかったので
Sleepを入れてあります
(コメントを外すと時間待ちします)
Win32アプリでコンパイルすると
consoleウインドウは開きません
のでprintfは使えませんが
ウインドウが1個なので
見やすくなります
Consoleアプリでコンパイルすると
consoleウインドウが開きますので
printfが使えますがウインドウが
2個になり見た目が悪くなります
glutを使わずに作ったバージョンの
leaf.exeも同包しました
(こちらはv-sync同期です
また、glut32.dllは必要ありません)
etc21213.zip(leaf.c, leaf.exe)は
以下のリンクからダウンロードできます
Readme.txtを読んで遊んで下さい
leaf.c
~.cはコメント以外のプログラムコードは自由に参考にして
使用して下さい
コメントを使用するときはULprojectの名を入れて下さい
/* leaf.c
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
シダ
Copyright(C) 2019-2020 ULpriject
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
INCLUDE FILE(s)
───────────────────────────────────*/
#ifdef WIN32
#include <windows.h>
#endif
#include "glut.h"
/*
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MACRO(s)
───────────────────────────────────*/
#ifdef WIN32
#define state(key) (GetAsyncKeyState(key) < 0) /* 現在(& 0x8000) */
#define sleep(ms) Sleep(ms)
#else
#define state(key) 0
#define sleep(ms)
#endif
/*
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CONSTANT(s)
───────────────────────────────────*/
#ifdef WIN32
#define KEY_U VK_UP
#define KEY_D VK_DOWN
#define KEY_L VK_LEFT
#define KEY_R VK_RIGHT
#define KEY_B VK_OEM_2 /* /? */
#define KEY_F VK_OEM_102 /* \_ */
#else
#define KEY_U 0
#define KEY_D 0
#define KEY_L 0
#define KEY_R 0
#define KEY_B 0 /* /? */
#define KEY_F 0 /* \_ */
#endif
/*
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
WINDOWS FUNCTION(s)
───────────────────────────────────*/
#ifdef _WINDOWS /* #ifndef _CONSOLE */
void main(int argc, char** argv);
int WINAPI WinMain(HINSTANCE inst, HINSTANCE n, LPSTR arg, int show)
{
int argc = 1;
char** argv = &arg;
main(argc, argv);
return 0;
}
#endif
/*
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PRIVATE VARIABLE(s)
───────────────────────────────────*/
static double leaf_d = 0.0;
static double leaf_s = -1.0;
static int leaf_p = 1;
/*
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PRIVATE FUNCTION(s)
───────────────────────────────────*/
static
void display(void)
{
glutSwapBuffers();
}
/*
───────────────────────────────────*/
static
void reshape(int w, int h)
{
glViewport(0, 0, w, h);
}
/*
───────────────────────────────────*/
static
void leaf(double size, int times)
{
double x, y, r;
int i;
x = y = 0.0;
for (i = 0; i < times; i++)
{
glVertex2d(x * size, y * size); /* 点 */
r = ((double)rand()) / (1.0 + (double)RAND_MAX);
if (r < 0.01)
{
r = 0;
y = y * 0.16;
}
else if (r < 0.01 + 0.07)
{
r = x * 0.20 - y * 0.26;
y = x * 0.23 + y * 0.22 + 1.60;
}
else if (r < 0.01 + 0.07 + 0.07)
{
r = y * 0.28 - x * 0.15;
y = x * 0.26 + y * 0.24 + 0.44;
}
else
{
r = x * 0.85 + y * 0.04;
y = y * 0.85 - x * 0.04 + 1.60;
}
x = r;
}
}
/*
───────────────────────────────────*/
static
void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case 'p': leaf_p = !leaf_p; break;
case 'r': leaf_s = -leaf_s; break;
case ' ': glRotated(180, 0.0, 1.0, 0.0); break;
case 13 : glLoadIdentity(); break;
}
}
/*
───────────────────────────────────*/
static
void move(void)
{
double d = 0.5;
double z = 5.0;
if (state(KEY_U)) glRotated( d, 1.0, 0.0, 0.0);
if (state(KEY_D)) glRotated(-d, 1.0, 0.0, 0.0);
if (state(KEY_L)) glRotated(-d, 0.0, 1.0, 0.0);
if (state(KEY_R)) glRotated( d, 0.0, 1.0, 0.0);
if (state(KEY_B)) glTranslated(0.0, 0.0, -z );
if (state(KEY_F)) glTranslated(0.0, 0.0, z );
}
/*
───────────────────────────────────*/
static
void idle(void)
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); /* r,g,b,a */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
move();
/* 四角形 */
if (leaf_p)
{
glPushMatrix();
glTranslated(0.0, 0.0, -1080);
glColor3d(0.8, 0.5, 0.0);
glBegin(GL_QUADS);
glColor3d(0.8, 0.5, 0.0);
glVertex3d(-320, -180, 0);
glVertex3d(-320, 180, -64);
glVertex3d( 0, 180, -64);
glVertex3d( 0, -180, 0);
glEnd();
glPopMatrix();
}
/* シダ */
glPushMatrix();
glTranslated(0.0, -180, -1080);
glRotated(leaf_d, 0.0, 1.0, 0.0);
leaf_d += leaf_s;
glBegin(GL_POINTS); /* 点 */
glColor3d(0.0, 1.0, 0.0);
leaf(40, 10000);
glEnd();
glPopMatrix();
glFlush(); /* 上記glコマンドをすへて実行 */
glutSwapBuffers(); /* Duble buffer(表示面と描画面)の切替 */
// sleep(15); /* 時間待ち(1000/60=16.6...ms */
}
/*
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FUNCTION(s)
───────────────────────────────────*/
void main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitWindowSize(704, 396);
glutInitWindowPosition(100, 100);
glutCreateWindow("Leaf (ULproject)");
glEnable(GL_DEPTH_TEST); /* Depth buffer on */
glMatrixMode(GL_PROJECTION); /* 行列モード変更 */
glLoadIdentity(); /* 単位行列 */
/* X0 X1 Y0 Y1 Z Far */
glFrustum(-320, 320, -180, 180, 720, 1000000);
glMatrixMode(GL_MODELVIEW); /* 行列モード変更 */
glLoadIdentity(); /* 単位行列 */
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutIdleFunc(idle); /* ここに処理を書く */
glutMainLoop(); /* 帰ってこない */
}