a23_usm002
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* a23_useSelfMade #2
-(by [[K]], 2023.01.18)
--親ページ: [[a23_useSelfMade]]
** 2023.01.18 Wed #1
-自作言語を作ってみてわかったのですが、C言語の { } を省略...
-でも一方で、 } のためだけに1行を使うのは行数が増えて悲し...
-私は悩みました。こんな記法がこの先何十年も使われたら、そ...
-ということで以下のような新スタイルを考えました。
--まあとにかく、基本的にはK&Rスタイル(でももはや原形をと...
--でも { } は一切省略しない。
--でも } だけの行は行数がもったいないので、 } だけになっ...
--それだと繰り返し範囲がわかりにくいと思うかもしれないけ...
--if~gotoや、if~breakや、if~continueやif~returnは例外...
--1行は100文字以下。ifやforやwhileやdoは、文頭に置かなけ...
--ifやforなどのコードブロックが一行で書ききれないときは、...
--中括弧閉じのあとは中括弧閉じか改行しか置かない。
-とりあえずこのスタイルに名前を付けておきます。KRKスタイ...
-ということで書き直した 3dwave.c[13行] です。
AWin *w = aOpenWin(640, 480, "3dwave");
int t, x, y, gx[42][42], gy[42][42];
for (t = 0; AWin_isClose(w) == 0; t++) {
aWait(8); aFillRect(w, 640, 480, 0, 0, 0x000000);
for (y = -20; y <= 21; y++) {
for (x = -20; x <= 21; x++) {
float d = sqrt(x * x + y * y), z = sin(d - 0...
int x0 = x + 19, y0 = y + 19, x1 = x + 20, y...
gx[y1][x1] = (x * 2 - y * 2 + z * 0) * 4 + 3...
gy[y1][x1] = (x * 2 + y * 2 + z * 1) * 2 + 2...
if (x0 >= 0 && y0 >= 0) {
aDrawLine(w, gx[y0][x0], gy[y0][x0], gx[...
aDrawLine(w, gx[y0][x0], gy[y0][x0], gx[...
https://essen.osask.jp/files/pic20230117a.png
-実行すると分かりますが、波が動きます。
-この「実行しやすい形式こそ次世代に残すべき」というのは結...
--ということで、これも修正。
~
** 2023.01.18 Wed #2
-とにかくどんどん使わないと自分のツールの良さも悪さも分か...
-kcubei.c[33行]
static int sqr[24] = { 7,6,2,3, 6,4,0,2, 1,0,4,5, 7,3,1,...
int vertx[8], verty[8], vertz[8], vx[8], vy[8], vz[8], s...
int centerz[7], b0[160], b1[160], thx, thy, thz, xp, xa,...
AWin *w = aOpenWin(256, 160, "kcube-i"); int y0, y1, x, ...
for (i = 0; i < 8; i++) {
vertx[i] = ( (i >> 2) * 2 - 1) * 50;
verty[i] = (((i >> 1) & 1) * 2 - 1) * 50;
vertz[i] = (( i & 1) * 2 - 1) * 50; }
for (thx = thy = thz = 0; AWin_isClose(w) == 0; ) {
thx = thx + 182; xp = aFf16Cos(thx); xa = aFf16Sin(t...
thy = thy + 273; yp = aFf16Cos(thy); ya = aFf16Sin(t...
thz = thz + 364; zp = aFf16Cos(thz); za = aFf16Sin(t...
for (i = 0; i < 8; i++) {
zt = vertz[i] * xp + verty[i] * xa; // x軸の周...
yt = verty[i] * xp - vertz[i] * xa;
xt = vertx[i] * yp + aMul64Shr(zt, ya, 16); // ...
vz[i] = aMul64Shr(zt, yp, 16) - vertx[i] * ya;
vx[i] = aMul64Shr(xt, zp, 16) - aMul64Shr(yt, za...
vy[i] = aMul64Shr(yt, zp, 16) + aMul64Shr(xt, za...
t = 9830400 / ((vz[i] + 26214400) >> 16);
sx[i] = aMul64Shr(vx[i], t, 31) + 128; sy[i] = a...
for (l = 0; l < 6 * 4; l = l + 4) {
centerz[l / 4] = vz[sqr[l]] + vz[sqr[l+1]] + vz[...
aWait(50); aFillRect(w, 160, 160, 48, 0, 0x000000);
for (centerz[6] = 0; (i = aArgMaxLstInt(centerz, 0, 7...
y0 = 999; y1 = 0; c = AWin_col16(i + 1); centerz...
for (l = 0; l < 4; l++) {
b = b0; j = sqr[i + l]; k = sqr[i + (l + 1) ...
if (sy[j] == sy[k]) continue;
if (sy[j] > sy[k]) { b = b1; ASwapTmp(j, k, ...
yk = sy[k]; dx = (sx[k] - sx[j]) * 65536 / (...
for (y = sy[j]; y <= yk; y++) { b[y] = x >> ...
for (y = y0; y <= y1; y++) { aFillRect(w, b1[y] ...
https://essen.osask.jp/files/pic20230118a.png
-実行すると分かりますが、立方体が回転します。今までこれを...
~
** 2023.01.19 Thu #1
-昨日のkcubei.cは整数演算のみのバージョンですが、おおもと...
-10行減って、23行になりました。回転キューブが23行で書ける...
-kcube.c[23行]
static int sqr[24] = { 7,6,2,3, 6,4,0,2, 1,0,4,5, 7,3,1,...
int sx[8], sy[8], b0[160], b1[160], y0, y1, x, y, c, dx,...
AWin *w = aOpenWin(256, 160, "kcube"); AVec3 vert[8], v[...
for (i = 0; i < 8; i++) {
vert[i] = AVec3_mul(100, AVec3_new((i >> 2) - 0.5, (...
for (th = AVec3_new(0, 0, 0); AWin_isClose(w) == 0; ) {
th = AVec3_add(th, AVec3_mul(3.14159265358979323 / 1...
AMat33 mat = AMat33_mul(AMat33_rotZ(th.z), AMat33_mu...
for (i = 0; i < 8; i++) {
v[i] = AMat33Vec3_mul(mat, vert[i]); t = 300.0 /...
sx[i] = v[i].x * t + 128; sy[i] = v[i].y * t + 8...
for (l = 0; l < 6 * 4; l += 4) {
centerz[l / 4] = v[sqr[l]].z + v[sqr[l+1]].z + v...
aWait(50); aFillRect(w, 160, 160, 48, 0, 0x000000);
for (centerz[6] = 0; (i = aArgMaxLstDbl(centerz, 0, ...
y0 = 999; y1 = 0; c = AWin_col16(i + 1); centerz...
for (l = 0; l < 4; l++) {
b = b0; j = sqr[i + l]; k = sqr[i + (l + 1) ...
if (sy[j] == sy[k]) continue;
if (sy[j] > sy[k]) { b = b1; ASwapTmp(j, k, ...
yk = sy[k]; dx = (sx[k] - sx[j]) * 65536 / (...
for (y = sy[j]; y <= yk; y++) { b[y] = x >> ...
for (y = y0; y <= y1; y++) { aFillRect(w, b1[y] ...
https://essen.osask.jp/files/pic20230119a.png
-なんとなくacl1のライブラリ関数について説明を書いておきま...
--AMat33_rotX: x軸まわりの3x3の回転行列を返します。
--aArgMaxLstDbl: double型の配列と、添え字の範囲[i0, i1)を...
--AUpdateMinMax: min値、max値、監視対象の変数を指定すると...
-このプログラムの最大の見どころは、描画関数として aFillRe...
~
** 2023.01.19 Thu #2
-今度は簡単なレイトレーシングをやってみます。
-kray.c[56行]
#include <acl1.c>
AClass(Isect) { AVec3 hitPoint, nor, col; double distanc...
AClass(Object) { AVec3 pos, col, nor; double rad; /* rad...
AClass(Util) { AVec3 light; Object s1, s2, s3, p; };
AInt32 col256(double t) { return (AInt32) (255.99999 * a...
void Sphere_intersect(Object s, AVec3 rayOrigin, AVec3 r...
AVec3 rs = AVec3_sub(rayOrigin, s.pos);
double b = AVec3_dot(rs, rayDir), c = AVec3_dot(rs, ...
if (d < 0.0) return;
double t = - b - sqrt(d);
if (t < 1.0e-4 || t > i->distance) return;
i->hitPoint = AVec3_add(rayOrigin, AVec3_mul(t, rayD...
i->nor = AVec3_normalize(AVec3_sub(i->hitPoint, s.po...
i->col = AVec3_mul(aSaturateDbl(AVec3_dot(light, i->...
void Plane_intersect(Object p, AVec3 rayOrigin, AVec3 ra...
double d = - AVec3_dot(p.pos, p.nor), v = AVec3_dot(...
if (v * v < 1.0e-30) return;
double t = - (AVec3_dot(rayOrigin, p.nor) + d) / v;
if (t < 1.0e-4 || t > i->distance) return;
AVec3 hp = i->hitPoint = AVec3_add(rayOrigin, AVec3_...
i->distance = t; i->nor = p.nor;
double d2 = aSaturateDbl(AVec3_dot(light, i->nor), 0...
if ((aReminder1(hp.x, 2) - 1) * (aReminder1(hp.z, 2)...
i->col = AVec3_mul(d2 * (1.0 - aSaturateDbl(fabs(hp....
void Util_intersect(Util u, AVec3 rayOrigin, AVec3 rayDi...
i->distance = 1.0e+30;
Sphere_intersect(u.s1, rayOrigin, rayDir, u.light, i);
Sphere_intersect(u.s2, rayOrigin, rayDir, u.light, i);
Sphere_intersect(u.s3, rayOrigin, rayDir, u.light, i);
Plane_intersect (u.p, rayOrigin, rayDir, u.light, i...
void aMain(AComArg *aCA) {
Util u; Isect i; AInt16 ix, iy, j;
u.s1.rad = 0.5; u.s1.pos = AVec3_new( 0.0, -0.5, 0.0...
u.s2.rad = 1.0; u.s2.pos = AVec3_new( 2.0, 0.0, cos...
u.s3.rad = 1.5; u.s3.pos = AVec3_new(-2.0, 0.5, cos...
u.p.nor = AVec3_new(0, 1, 0); u.p.pos = AVec3_new(0,...
AWin *win = aOpenWin(512, 384, "kray"); u.light = AV...
for (iy = 0; iy < 384; iy++) {
for (ix = 0; ix < 512; ix++) {
AVec3 rayDir = AVec3_normalize(AVec3_new(ix ...
Util_intersect(u, AVec3_new(0.0, 2.0, 6.0), ...
AVec3 dstCol = AVec3_mul(rayDir.y, AVec3_new...
if (i.distance < 1.0e+30) {
AVec3 tmpCol = dstCol = i.col;
for (j = 1; j < 4; j++) {
rayDir = AVec3_add(rayDir, AVec3_mul...
Util_intersect(u, i.hitPoint, rayDir...
if (i.distance >= 1.0e+30) break;
tmpCol = AVec3_new(tmpCol.x * i.col....
dstCol = AVec3_add(dstCol, tmpCol); }}
aSetPix(win, ix, iy, aRgb8(col256(dstCol.x),...
https://essen.osask.jp/files/pic20230119b.png
-レイトレーシングが56行で書けるなんて、私は感激です!
-もちろんレイトレーシング用のライブラリ関数があるわけでは...
-[Q] やっていることは面白いとは思うんだけど、C++でやった...
--[A] そうですね、メンバ関数とか使えるし演算子のオーバー...
~
** 2023.01.19 Thu #3
-世間では、大きなプログラムはかっこいいと思う人が一定数い...
-大きなプログラムをうまく作れる人になりたければ、例えば一...
-私は小さいプログラムをうまく作ることを目指して本当に良か...
~
** 2023.01.20 Fri #1
-昨日は忙しくて翌日分の開発ができなかったので、今日の更新...
~
** 2023.01.22 Sun #1
-私は今はこうして言語を拡張しているというか、環境を整備し...
-「小さいちょっとした改良でしかないのに、見違えるほど便利...
-kcubeには2つのバージョンがあります。整数演算のみのkcubei...
-高度な機能がある言語じゃないと動かせないプログラムは、私...
-いやもちろんC++でもPythonでも、今の主要なOSの上では問題...
-だからシンプルな言語でも動かせるプログラムは、(行数的に...
~
** 2023.01.23 Mon #1
-穴掘り法の迷路のプログラムのリメイクをしました。
-maze.c[14行]
static int dx[4] = { 1, -1, 0, 0 }, dy[4] = { 0, 0, 1, -...
AWin *w = aOpenWinEx(47, 31, "maze"); aEchBox(w, 47, 31,...
for (i = 0; i < 1000000; i++) {
AInt x = aRnd(23) * 2 + 1, y = aRnd(15) * 2 + 1, xx,...
if (aGetEch(w, x, y) == 0) {
for (;;) {
for (j = 0; j < 4; j++) { // 四方の状態を調...
d[j] = 0; xx = x + dx[j]; yy = y + dy[j];
if (1 <= xx && xx <= 45 && 1 <= yy && yy...
d[j] = aGetEch(w, xx, yy) * aGetEch(...
j = aArgMaxRndInt(d, 0, 4);
if (d[j] == 0) break;
aEch(w, x + dx[j], y + dy[j], 0, 0, 0);
x = x + dx[j] * 2; y = y + dy[j] * 2; aEch(w...
https://essen.osask.jp/files/pic20230123a.png
-まあ簡単なプログラムなので、短く書けるのは当然かもしれま...
~
** 2023.01.23 Mon #2
-3dwavei.c[15行] : 整数演算のみでやってみました。配列も1...
AWin *w = aOpenWin(640, 480, "3dwave-i");
int t, x, y, gx[42 * 42], gy[42 * 42];
for (t = 0; AWin_isClose(w) == 0; t++) {
aWait(8); aFillRect(w, 640, 480, 0, 0, 0x000000);
for (y = -20; y <= 21; y++) {
for (x = -20; x <= 21; x++) {
int d = aFf16Sqrt((x * x + y * y) * 65536);
int z = aFf16Sin(((d * 652) >> 12) - 1043 * ...
int x0 = x + 19, y0 = y + 19, x1 = x + 20, y...
int y1x1 = y1 * 42 + x1, y0x0 = y0 * 42 + x0...
gx[y1x1] = (x * 2 - y * 2 + z * 0) * 4 + 320;
gy[y1x1] = (x * 2 + y * 2 + z * 1) * 2 + 240;
if (x0 >= 0 && y0 >= 0) {
aDrawLine(w, gx[y0x0], gy[y0x0], gx[y0x1...
aDrawLine(w, gx[y0x0], gy[y0x0], gx[y1x0...
https://essen.osask.jp/files/pic20230123b.png
-2023.01.18の写真と比べると、ウィンドウタイトルくらいしか...
~
** 2023.01.23 Mon #3
-MinGWの過去のバージョンはここから持ってこられるみたいで...
--https://sourceforge.net/projects/mingw/files/OldFiles/
-古いバージョンは、生成される.exeが小さくできる版もあるの...
~
** 2023.01.23 Mon #4
-実は数日前から HL-9 の改造をしているのですが、 HL-9 で e...
//子供に教える手順
//mandelと迷路.
//カレンダー.
* こめんと欄
#comment
終了行:
* a23_useSelfMade #2
-(by [[K]], 2023.01.18)
--親ページ: [[a23_useSelfMade]]
** 2023.01.18 Wed #1
-自作言語を作ってみてわかったのですが、C言語の { } を省略...
-でも一方で、 } のためだけに1行を使うのは行数が増えて悲し...
-私は悩みました。こんな記法がこの先何十年も使われたら、そ...
-ということで以下のような新スタイルを考えました。
--まあとにかく、基本的にはK&Rスタイル(でももはや原形をと...
--でも { } は一切省略しない。
--でも } だけの行は行数がもったいないので、 } だけになっ...
--それだと繰り返し範囲がわかりにくいと思うかもしれないけ...
--if~gotoや、if~breakや、if~continueやif~returnは例外...
--1行は100文字以下。ifやforやwhileやdoは、文頭に置かなけ...
--ifやforなどのコードブロックが一行で書ききれないときは、...
--中括弧閉じのあとは中括弧閉じか改行しか置かない。
-とりあえずこのスタイルに名前を付けておきます。KRKスタイ...
-ということで書き直した 3dwave.c[13行] です。
AWin *w = aOpenWin(640, 480, "3dwave");
int t, x, y, gx[42][42], gy[42][42];
for (t = 0; AWin_isClose(w) == 0; t++) {
aWait(8); aFillRect(w, 640, 480, 0, 0, 0x000000);
for (y = -20; y <= 21; y++) {
for (x = -20; x <= 21; x++) {
float d = sqrt(x * x + y * y), z = sin(d - 0...
int x0 = x + 19, y0 = y + 19, x1 = x + 20, y...
gx[y1][x1] = (x * 2 - y * 2 + z * 0) * 4 + 3...
gy[y1][x1] = (x * 2 + y * 2 + z * 1) * 2 + 2...
if (x0 >= 0 && y0 >= 0) {
aDrawLine(w, gx[y0][x0], gy[y0][x0], gx[...
aDrawLine(w, gx[y0][x0], gy[y0][x0], gx[...
https://essen.osask.jp/files/pic20230117a.png
-実行すると分かりますが、波が動きます。
-この「実行しやすい形式こそ次世代に残すべき」というのは結...
--ということで、これも修正。
~
** 2023.01.18 Wed #2
-とにかくどんどん使わないと自分のツールの良さも悪さも分か...
-kcubei.c[33行]
static int sqr[24] = { 7,6,2,3, 6,4,0,2, 1,0,4,5, 7,3,1,...
int vertx[8], verty[8], vertz[8], vx[8], vy[8], vz[8], s...
int centerz[7], b0[160], b1[160], thx, thy, thz, xp, xa,...
AWin *w = aOpenWin(256, 160, "kcube-i"); int y0, y1, x, ...
for (i = 0; i < 8; i++) {
vertx[i] = ( (i >> 2) * 2 - 1) * 50;
verty[i] = (((i >> 1) & 1) * 2 - 1) * 50;
vertz[i] = (( i & 1) * 2 - 1) * 50; }
for (thx = thy = thz = 0; AWin_isClose(w) == 0; ) {
thx = thx + 182; xp = aFf16Cos(thx); xa = aFf16Sin(t...
thy = thy + 273; yp = aFf16Cos(thy); ya = aFf16Sin(t...
thz = thz + 364; zp = aFf16Cos(thz); za = aFf16Sin(t...
for (i = 0; i < 8; i++) {
zt = vertz[i] * xp + verty[i] * xa; // x軸の周...
yt = verty[i] * xp - vertz[i] * xa;
xt = vertx[i] * yp + aMul64Shr(zt, ya, 16); // ...
vz[i] = aMul64Shr(zt, yp, 16) - vertx[i] * ya;
vx[i] = aMul64Shr(xt, zp, 16) - aMul64Shr(yt, za...
vy[i] = aMul64Shr(yt, zp, 16) + aMul64Shr(xt, za...
t = 9830400 / ((vz[i] + 26214400) >> 16);
sx[i] = aMul64Shr(vx[i], t, 31) + 128; sy[i] = a...
for (l = 0; l < 6 * 4; l = l + 4) {
centerz[l / 4] = vz[sqr[l]] + vz[sqr[l+1]] + vz[...
aWait(50); aFillRect(w, 160, 160, 48, 0, 0x000000);
for (centerz[6] = 0; (i = aArgMaxLstInt(centerz, 0, 7...
y0 = 999; y1 = 0; c = AWin_col16(i + 1); centerz...
for (l = 0; l < 4; l++) {
b = b0; j = sqr[i + l]; k = sqr[i + (l + 1) ...
if (sy[j] == sy[k]) continue;
if (sy[j] > sy[k]) { b = b1; ASwapTmp(j, k, ...
yk = sy[k]; dx = (sx[k] - sx[j]) * 65536 / (...
for (y = sy[j]; y <= yk; y++) { b[y] = x >> ...
for (y = y0; y <= y1; y++) { aFillRect(w, b1[y] ...
https://essen.osask.jp/files/pic20230118a.png
-実行すると分かりますが、立方体が回転します。今までこれを...
~
** 2023.01.19 Thu #1
-昨日のkcubei.cは整数演算のみのバージョンですが、おおもと...
-10行減って、23行になりました。回転キューブが23行で書ける...
-kcube.c[23行]
static int sqr[24] = { 7,6,2,3, 6,4,0,2, 1,0,4,5, 7,3,1,...
int sx[8], sy[8], b0[160], b1[160], y0, y1, x, y, c, dx,...
AWin *w = aOpenWin(256, 160, "kcube"); AVec3 vert[8], v[...
for (i = 0; i < 8; i++) {
vert[i] = AVec3_mul(100, AVec3_new((i >> 2) - 0.5, (...
for (th = AVec3_new(0, 0, 0); AWin_isClose(w) == 0; ) {
th = AVec3_add(th, AVec3_mul(3.14159265358979323 / 1...
AMat33 mat = AMat33_mul(AMat33_rotZ(th.z), AMat33_mu...
for (i = 0; i < 8; i++) {
v[i] = AMat33Vec3_mul(mat, vert[i]); t = 300.0 /...
sx[i] = v[i].x * t + 128; sy[i] = v[i].y * t + 8...
for (l = 0; l < 6 * 4; l += 4) {
centerz[l / 4] = v[sqr[l]].z + v[sqr[l+1]].z + v...
aWait(50); aFillRect(w, 160, 160, 48, 0, 0x000000);
for (centerz[6] = 0; (i = aArgMaxLstDbl(centerz, 0, ...
y0 = 999; y1 = 0; c = AWin_col16(i + 1); centerz...
for (l = 0; l < 4; l++) {
b = b0; j = sqr[i + l]; k = sqr[i + (l + 1) ...
if (sy[j] == sy[k]) continue;
if (sy[j] > sy[k]) { b = b1; ASwapTmp(j, k, ...
yk = sy[k]; dx = (sx[k] - sx[j]) * 65536 / (...
for (y = sy[j]; y <= yk; y++) { b[y] = x >> ...
for (y = y0; y <= y1; y++) { aFillRect(w, b1[y] ...
https://essen.osask.jp/files/pic20230119a.png
-なんとなくacl1のライブラリ関数について説明を書いておきま...
--AMat33_rotX: x軸まわりの3x3の回転行列を返します。
--aArgMaxLstDbl: double型の配列と、添え字の範囲[i0, i1)を...
--AUpdateMinMax: min値、max値、監視対象の変数を指定すると...
-このプログラムの最大の見どころは、描画関数として aFillRe...
~
** 2023.01.19 Thu #2
-今度は簡単なレイトレーシングをやってみます。
-kray.c[56行]
#include <acl1.c>
AClass(Isect) { AVec3 hitPoint, nor, col; double distanc...
AClass(Object) { AVec3 pos, col, nor; double rad; /* rad...
AClass(Util) { AVec3 light; Object s1, s2, s3, p; };
AInt32 col256(double t) { return (AInt32) (255.99999 * a...
void Sphere_intersect(Object s, AVec3 rayOrigin, AVec3 r...
AVec3 rs = AVec3_sub(rayOrigin, s.pos);
double b = AVec3_dot(rs, rayDir), c = AVec3_dot(rs, ...
if (d < 0.0) return;
double t = - b - sqrt(d);
if (t < 1.0e-4 || t > i->distance) return;
i->hitPoint = AVec3_add(rayOrigin, AVec3_mul(t, rayD...
i->nor = AVec3_normalize(AVec3_sub(i->hitPoint, s.po...
i->col = AVec3_mul(aSaturateDbl(AVec3_dot(light, i->...
void Plane_intersect(Object p, AVec3 rayOrigin, AVec3 ra...
double d = - AVec3_dot(p.pos, p.nor), v = AVec3_dot(...
if (v * v < 1.0e-30) return;
double t = - (AVec3_dot(rayOrigin, p.nor) + d) / v;
if (t < 1.0e-4 || t > i->distance) return;
AVec3 hp = i->hitPoint = AVec3_add(rayOrigin, AVec3_...
i->distance = t; i->nor = p.nor;
double d2 = aSaturateDbl(AVec3_dot(light, i->nor), 0...
if ((aReminder1(hp.x, 2) - 1) * (aReminder1(hp.z, 2)...
i->col = AVec3_mul(d2 * (1.0 - aSaturateDbl(fabs(hp....
void Util_intersect(Util u, AVec3 rayOrigin, AVec3 rayDi...
i->distance = 1.0e+30;
Sphere_intersect(u.s1, rayOrigin, rayDir, u.light, i);
Sphere_intersect(u.s2, rayOrigin, rayDir, u.light, i);
Sphere_intersect(u.s3, rayOrigin, rayDir, u.light, i);
Plane_intersect (u.p, rayOrigin, rayDir, u.light, i...
void aMain(AComArg *aCA) {
Util u; Isect i; AInt16 ix, iy, j;
u.s1.rad = 0.5; u.s1.pos = AVec3_new( 0.0, -0.5, 0.0...
u.s2.rad = 1.0; u.s2.pos = AVec3_new( 2.0, 0.0, cos...
u.s3.rad = 1.5; u.s3.pos = AVec3_new(-2.0, 0.5, cos...
u.p.nor = AVec3_new(0, 1, 0); u.p.pos = AVec3_new(0,...
AWin *win = aOpenWin(512, 384, "kray"); u.light = AV...
for (iy = 0; iy < 384; iy++) {
for (ix = 0; ix < 512; ix++) {
AVec3 rayDir = AVec3_normalize(AVec3_new(ix ...
Util_intersect(u, AVec3_new(0.0, 2.0, 6.0), ...
AVec3 dstCol = AVec3_mul(rayDir.y, AVec3_new...
if (i.distance < 1.0e+30) {
AVec3 tmpCol = dstCol = i.col;
for (j = 1; j < 4; j++) {
rayDir = AVec3_add(rayDir, AVec3_mul...
Util_intersect(u, i.hitPoint, rayDir...
if (i.distance >= 1.0e+30) break;
tmpCol = AVec3_new(tmpCol.x * i.col....
dstCol = AVec3_add(dstCol, tmpCol); }}
aSetPix(win, ix, iy, aRgb8(col256(dstCol.x),...
https://essen.osask.jp/files/pic20230119b.png
-レイトレーシングが56行で書けるなんて、私は感激です!
-もちろんレイトレーシング用のライブラリ関数があるわけでは...
-[Q] やっていることは面白いとは思うんだけど、C++でやった...
--[A] そうですね、メンバ関数とか使えるし演算子のオーバー...
~
** 2023.01.19 Thu #3
-世間では、大きなプログラムはかっこいいと思う人が一定数い...
-大きなプログラムをうまく作れる人になりたければ、例えば一...
-私は小さいプログラムをうまく作ることを目指して本当に良か...
~
** 2023.01.20 Fri #1
-昨日は忙しくて翌日分の開発ができなかったので、今日の更新...
~
** 2023.01.22 Sun #1
-私は今はこうして言語を拡張しているというか、環境を整備し...
-「小さいちょっとした改良でしかないのに、見違えるほど便利...
-kcubeには2つのバージョンがあります。整数演算のみのkcubei...
-高度な機能がある言語じゃないと動かせないプログラムは、私...
-いやもちろんC++でもPythonでも、今の主要なOSの上では問題...
-だからシンプルな言語でも動かせるプログラムは、(行数的に...
~
** 2023.01.23 Mon #1
-穴掘り法の迷路のプログラムのリメイクをしました。
-maze.c[14行]
static int dx[4] = { 1, -1, 0, 0 }, dy[4] = { 0, 0, 1, -...
AWin *w = aOpenWinEx(47, 31, "maze"); aEchBox(w, 47, 31,...
for (i = 0; i < 1000000; i++) {
AInt x = aRnd(23) * 2 + 1, y = aRnd(15) * 2 + 1, xx,...
if (aGetEch(w, x, y) == 0) {
for (;;) {
for (j = 0; j < 4; j++) { // 四方の状態を調...
d[j] = 0; xx = x + dx[j]; yy = y + dy[j];
if (1 <= xx && xx <= 45 && 1 <= yy && yy...
d[j] = aGetEch(w, xx, yy) * aGetEch(...
j = aArgMaxRndInt(d, 0, 4);
if (d[j] == 0) break;
aEch(w, x + dx[j], y + dy[j], 0, 0, 0);
x = x + dx[j] * 2; y = y + dy[j] * 2; aEch(w...
https://essen.osask.jp/files/pic20230123a.png
-まあ簡単なプログラムなので、短く書けるのは当然かもしれま...
~
** 2023.01.23 Mon #2
-3dwavei.c[15行] : 整数演算のみでやってみました。配列も1...
AWin *w = aOpenWin(640, 480, "3dwave-i");
int t, x, y, gx[42 * 42], gy[42 * 42];
for (t = 0; AWin_isClose(w) == 0; t++) {
aWait(8); aFillRect(w, 640, 480, 0, 0, 0x000000);
for (y = -20; y <= 21; y++) {
for (x = -20; x <= 21; x++) {
int d = aFf16Sqrt((x * x + y * y) * 65536);
int z = aFf16Sin(((d * 652) >> 12) - 1043 * ...
int x0 = x + 19, y0 = y + 19, x1 = x + 20, y...
int y1x1 = y1 * 42 + x1, y0x0 = y0 * 42 + x0...
gx[y1x1] = (x * 2 - y * 2 + z * 0) * 4 + 320;
gy[y1x1] = (x * 2 + y * 2 + z * 1) * 2 + 240;
if (x0 >= 0 && y0 >= 0) {
aDrawLine(w, gx[y0x0], gy[y0x0], gx[y0x1...
aDrawLine(w, gx[y0x0], gy[y0x0], gx[y1x0...
https://essen.osask.jp/files/pic20230123b.png
-2023.01.18の写真と比べると、ウィンドウタイトルくらいしか...
~
** 2023.01.23 Mon #3
-MinGWの過去のバージョンはここから持ってこられるみたいで...
--https://sourceforge.net/projects/mingw/files/OldFiles/
-古いバージョンは、生成される.exeが小さくできる版もあるの...
~
** 2023.01.23 Mon #4
-実は数日前から HL-9 の改造をしているのですが、 HL-9 で e...
//子供に教える手順
//mandelと迷路.
//カレンダー.
* こめんと欄
#comment
ページ名: