ここは個人の趣味のページです。
昭和49年生まれ、血液型B型、男。
名前は、かわ、kawa、d_kawakawa、cookiepuddingman、平行四辺形 などいろいろあります。
私がプログラミングを好むのは、プログラミングは私の「物づくり」に対する探求心と創造性を十分に満たしてくれるから、、です。
憧れに向かう、形にする。そんなわけで、この個人ページではプログラミングの話をすることが多いです。
ここの管理人、
AI の利用やめるってよ。
AI の問題点:
これらが向こう10年解決されないだろうと見込んで、やめることにしました。(2025年5月23日~)
私は AI に頼らず「自分の力」を大切にしたいです。
…とはいえ、人間は新しく見つけた技術を手放すということは基本的にやらないと思います。
だから私も後々 AI を利用することにはなると思います。
でも上記の問題点は確かなもので、将来 AI ロボが私の家の扉をコンコンと叩いて
「市からの要請で、お手伝いするため おうかがいしました」
と言うまでの間は、この AI 技術を導入せず、頑張ってみようと思います。
でもこの考え方、キツイと思うのでマネしなくていいです。


質問者: 将来ゲーム開発に関わりたいと思うなら学ぶプログラミング言語はc#一択でしょうか?
私: スクエニhttps://www.jp.square-enix.com/recruit/career/job/engineer/index.html...
質問者: プログラミングって何を読んで勉強すればいいですか?英語、数学、国語、理科、社会のうち...
私: 長文でスミマセン。 なるべく読みやすいようにはしたつもりですが、、 ●英語は?...
質問者: このプログラミングでNが偶数だと上手く描画できない理由を教えてください
私: ■上手く描画できない理由■k はその点の向かいの点を計算するための係数です。N 角形の...
質問者: JRPGって単純そうなゲームだから生成AIで一から全部作れないでしょうか?
私: RPG って全然単純じゃないですよ。●コマンドメニューのシステムがあり、●キャラが...
私の回答の成績はこんな感じです。

この「ベストアンサー率」は、他の人々と比べると「高め」だと思います。
しかし、最近はちょっと調子が悪くて、64% は 63% になるかなとおそれています。
ベストアンサーにこだわらず、そんなふうに回答を続けることができれば、私にとって幸いだと思います。
「これ、どうやるんですか?」
「こうやるんだよ」
このやりとりの中に、ベストアンサーという競争じみたものは本来無いはずで、あってはならないとも言えます。
そんなシステムに翻弄される人々と私。
罪なシステムだね知恵袋。
(訪問者のどんなニーズと この記事がつながるか)
3DCG モデルをウェブページ上に表示させる仕組みを作っています。
下図は、3DCG で作った人間のモデルがページ上の要素(小さな青い■)を手のひらに乗せている様子です。
できあがっている図ではなく、このような形にしたいという図(イメージ)です。

という動きを計算で自動的にやろうとしています。

図では、「左の肩」と「手の平」と「青い■」の3点を三角形で結び、半透明の水色で塗っています。
肩を中心に腕がそのままの姿勢で青い■まで回転すれば、「添える」🫴という図になります。
その回転量は三角形の肩付近の角の角度です。これは「内積」という計算で求まります。
何度も言うように私は「内積」について幾何学(空間中の矢印を扱うような数学)の教科書を開いて📖勉強したことは一度もありません。後述の「外積」も同じです。
自分のプログラムの中で何度も何度も使っていると、それが何なのかだいたい見えてきます。
勉強だけだと何のために勉強しているのかまったく不明で難しくて覚えにくいですが、3DCG のために「内積」「外積」を使っていると自然と身に付いて楽な勉強方法と言えます。
肩をどのような軸で回転させるのかというと、「法線」という三角形の面に垂直に交わる線を軸として回転させます。(図の左肩から上に伸びている赤い線です)
その軸を示す x, y, z の 3 つと、それから角度、この4つの情報を元に「クォータニオン」というデータ(4つの情報を所定の計算で変換した4要素の配列)を作成し、腕の各頂点の座標にこのクォータニオンを適用(掛け算)させると、腕全体が回転します。
…そのはずなんですが、うまくいかなくておかしな方向に腕が回転してしまいます。
最近はその辺をいろいろ調べていていました。

本番プログラム上でうまく動かないものをデバッグするのは取り回しが悪いので、新しいプログラムを作成します。
同じ水色の三角形(左の肩、手のひら、青い■ は 上図の center、finger、element に対応します)を描き、その三角形の法線(上図の center から上に伸びる赤い線。先に青い●)を描き、その法線を軸としてクォータニオンを作り、そのクォータニオンを使って立方体を回転させる、という調査用プログラム
です。
昨日、会社の飲み会に出席(私は出る予定ではなかったけど、「飲み会代金を払ったけど具合が悪いので 代わりに出てくれ 」と言われて代打で別部署の飲み会に出席しました。代打で別部署の飲み会に出るなんてイケてる人に見えますが、そんなことはないです…)して帰ってきて
「となりに座った若い女の子とちっともしゃべれんかった私」
(…でしょ)
とか思いつつ、この問題に取り組み、解決しました。私の取り柄はそこ(プログラミング)にしかないから。
(解決の内容をここに書いていましたが、ミスっていたので削除しました。唯一の取り柄なのにミスってるんですか=3)
(訪問者のどんなニーズと この記事がつながるか)
「M:I ファイナル・レコニング」/2025年アメリカ/スパイアクション/2:49/↑公★4.5、↓私★2.8
「28年後」/2025年イギリス/ホラー/1:55/→公★3、↑私★3.6
げっそりとして気分が悪い、、そんな理由で休んだりしています。
「残業しないで定時で帰る。それができないならば、辞める」というような話をしていて、結果はグレーゾーンになっていますが、本質的にはちょっと難しい気がしています。具合が悪いのが本当だからです。
私の元々の性格から言って、なかなか難しいところだと思いますが、できるだけやってみようと思っています。
(訪問者のどんなニーズと この記事がつながるか)
ヤフオクにて。

そうっすねー ダレヤオマエ
左から2番目のキーボードとモニター付きの BA3 が良いですね。
BA3 は PC-9801 らしさを残した最後の機種です。
同時発色数は 4096 色中 16色で、640x480 の画面で独特の美しさを放ちます。
BA3 から先の機種だと、もう 256 色導入で、画面解像度も上がり、PC-98 の良さから離れ始めます。
PC-9801 は 1990 年代に日本で 90% 以上のシェアを誇っていた国民機とも呼ばれたパソコンです。
多くのビジネスソフト、ゲームソフトが発売され、一世を風靡しました。
でも、
という理由でなかなか買えません。
買うとしたら、本当に記念品。お遊び。というスタンスとなります。
PC-9801 でプログラミングするとかなり面白いはずだけど。
(訪問者のどんなニーズと この記事がつながるか)
▼キャラはまっすぐ前を見ていますが、

▼あるメソッドを呼ぶとカメラ目線になります。

「カメラ目線になります」と一言で言っていますが、複雑な計算で実現されています。
この 3 点を結んで三角形とし、さらにこの三角形面の「法線」を求め、これを jiku とする。
これは掛け軸
上記 1. から 2. へ伸びる線と、1. から 3. へ伸びる線の2線の成す角を求め、これを nasukaku とする。🍆
jiku の座標 x, y, z と nasukaku の4つの値からクォータニオン(四元数)を作る。
この人体モデルのシステムにおいて「頭が首に対して何度曲がる」という表現をするときにこのクォータニオンを加えると頭は画面の方を向く。
最近 Windows は変な機能が多め
しかし、頭だけが曲がると不自然なので、
jiku の座標 x, y, z と「nasukaku の半分の値」から、半分だけ回転するクォータニオンを作り、頭と首の2つのそれぞれの回転で用いるようにする。
首と頭が半分ずつ曲がると、頭は結局2つ合わせて nasukaku ぴったり曲がるので、画面の方を向く。
(このシステムでは頭は首の回転の影響を受ける)
そんなふうな計算をやって、向かう先は「このキャラを使ってのプログラミング教育」ですね。
この女の子が「ソースコードや図解を表示したページの上」を歩き回り、ある画像の中の一部を指さしてこっちを見ながら説明したり、ページをスマホ操作みたいにフリックするジェスチャーをしてページがスクロールするとか、そんなことをやったら画期的で魅力が出ると思います。
(訪問者のどんなニーズと この記事がつながるか)
ポーズどうしの遷移ができるようになりました。
下の動画では、3Dモデルのお姉さんが、ラジオ体操の「からだを横にまげる運動」を延々と繰り返しています。
プログラムでは身体の関節それぞれに「何度曲げる」というプロパティがあります。
(正確には『胸モデル は おなかモデル に対して何度曲げる』というようなプロパティです。角度を持った「関節」は特別用意していません。説明のために "関節" と言っています)
「ひじ」の関節について「0度曲げる」という状態は伸ばしている状態です。
「90度」曲げるとなれば、ひじを90度曲げた状態です。
「170度」くらいで完全に折り曲げた状態です。
ひじはひとつの方向にしか曲がりませんが、肩は 360 度どの方向にも曲げられます。
X 軸を中心に何度曲げる、Y 軸を中心に何度曲げる、Z 軸を中心に何度曲げる、のようにどんな方向に曲げるのかは割と自由にできます。
① "腕を腰に当てる" ポーズは左肩を60度くらい曲げて、ひじを100度曲げて、手首を90度曲げて、そして指先はほどよく曲げます。それで腰に手が当たる感じになり、"腕を腰に当てる" ポーズとなります。
▼左肩の回転は jowanLM(上腕 Left Model)、左ひじは zenwanLM(前腕 Left Model)、左手首は kouLM(手の甲 Left Model)で表現します。

② "足を広げる" ポーズは両足のももを8度くらい広げて、足首を逆方向に8度曲げます。これで "足を広げる" となります。
▼両ももの回転は momoLM(もも Left Model)と momoRM(もも Right Model)、両足首の回転は asiLM(足 Left Model)と asiRM(足 Right Model)で表現します。

③ "横に倒す" ポーズも同様で、頭、首、胸、腰、それぞれ適度に曲げます。右手も曲げますね。
▼頭の回転は atamaM(頭 Model)、首は kubiM(首 Model)と、以下同文です。

T は Theta の T です。T は定数であり、3 という数値です。「配列の3番目」を意味します。(配列の3番目に角度を配置している)
rad() は360度の角度をラジアンの角度に変換します。
360度とラジアンの関係は、円とドルとか、センチメートルとインチ、キログラムとポンドの関係と同じです。尺度が違うんですね。
上図の各行は、
girlF.jowanLM.kaitenz[ "x" ][ T ] = rad( -30 );
のようなことを最終的に行います。
…でも今日の作業で T は W に変更しました。クォータニオンのその数値は w で表されます。
なんで w なのかははっきりと分かりませんが、数学では x, y, z に次ぐ第四の未知数として w を使うから、、かもしれません。
▼ https://ja.wikipedia.org/wiki/W#W_の意味 より

動画の「動きのデータ」としてはこの3つのポーズデータだけです。
たったこれだけのデータで動画のような動きになってしまうんですよね。
動きは各ポーズ間を補完するように角度を変えていきます。
直立の状態だと、左の肩から指先までそれぞれ0度の状態です。
ここから "腕を腰に当てる" ポーズにするには、たとえば肩だと、0度から徐々に60度へ向かって増やしていきます。
そのとき同時にひじは、0度から始まって徐々に90度へ向かって増やしていきます。
これを1秒で終わらすには、画面描画が 100 ミリ秒ごとに行われるとすると、1秒のあいだに合計10回描画されます。
60度と90度へのそれぞれの変更を10回で行うには、
60度は1描画あたり6度進めて、
90度は1描画あたり9度進めます。
これで、肩を60度上げて、ひじを90度曲げるという "腕を腰に当てる" というポーズが実現できます。
おおまかなやり方はそれだけなんですけど、「それだけ」にしては動きがダイナミックですね。
筋道立てて、理論的にきちんとプログラミングを進めると、それが目に見えない説得力のようなものになり、筋が通っているゆえに大きな可能性につながるんですね。筋が通っていないと拡張性が損なわれ、可能性が制限されます。
3DCG プログラミングの場合はそれが特に顕著です。
(訪問者のどんなニーズと この記事がつながるか)