木曜日, 8月 28, 2025

Let's start JavaScript 81 
HTML上でランダムな斜線を描画

HTML上でランダムな色と太さの斜線を描画します。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport"
        content="width=device-width, initial-scale=1.0">
<title>ランダム斜め線描画</title>
<style>
body {
text-align: center;
font-family: Arial, sans-serif;
background-color: Black;
}
canvas {
border: 2px solid black;
margin-top: 10px;
background: white;
border: 1px solid white;
}
</style>
</head>
<body>

<h3>
    <font color="white">Random diagonal line drawing</font>
    </h3>
<label for="lineCount">線の本数:</label>
<input type="number" id="lineCount" value="10" min="1">
<button onclick="drawRandomLines()">描画</button>

<br>
<canvas id="canvas" width="500" height="500"></canvas>
<!-- canvas の width や height を変更すれば、
描画エリアを大きく or 小さくできます。 -->

<script>
function drawRandomLines() {
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
const numLines = parseInt(document.
                getElementById("lineCount").value, 10);

if (isNaN(numLines) || numLines < 1) {
alert("正しい本数を入力してください!");
return;
}

// キャンバスをクリア
// ctx.globalAlpha = 0.5; を追加すると、
            // 半透明の線を描画できます。
ctx.clearRect(0, 0, canvas.width, canvas.height);

for (let i = 0; i < numLines; i++) {
// ランダムな開始点と終了点
let x1 = randomRange(0, canvas.width);
let y1 = randomRange(0, canvas.height);
let x2 = randomRange(0, canvas.width);
let y2 = randomRange(0, canvas.height);

// ランダムな線の太さ
let lineWidth = randomRange(1, 15);
// randomRange(1, 15); の範囲を変更すると、
// 線の太さを太く or 細く 調整可能。

// ランダムなRGBカラー
let color = `rgb(${randomRange(0, 255)},
${randomRange(0, 255)}, ${randomRange(0, 255)})`;

// 線を描画
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.lineTo(x2, y2);
ctx.lineWidth = lineWidth;
ctx.strokeStyle = color;
ctx.stroke();
}
}

// min~maxの範囲でランダムな数を生成
function randomRange(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
</script>
</body>
</html>

実行北後の画面です。数値(デフォルトは10)を入力して[描画]をクリックすれば・・・

枠内に表示されます。

100で実行した結果。

TCDW8507 
設定していないメーカーって、ある意味で猛者

Baby Alien 136
ベンチ系(^o^)
20年ほど前、マーケットで小学生が母親に「この商品ヤバイよ!」と言って母親がビックリしながら理由を聞いたら・・・。「だってホームページが書かれていない」・・・。商売をしていて今も記載していない、あるいは設定していないメーカーって、ある意味で猛者なのかも。

水曜日, 8月 27, 2025

Illustratorでの作図基本 23 
ドーナッツ作成は3Dでアクセント

質問がありましたので・・・
Illustratorでドーナツ作成は3D(クラッシック)の回転体がお薦めです。

ベースとなる円を作成し・・・

角度などを設定して[表面:陰影(艶有り)]を実行します。

処理結果の選択して・・・
control C(command C)でコピーしてから
control 2(command 2)でロック
続けて
control F(command F)で同じ位置にペースとします。
ペースとしたデータを[オブジェクト]>[アピアランスを分割]し、
続けて[ウィンドウ]>[パスファインダー]>[合体]を実行。
必要に応じて[オブジェクト]>[パス]>[単純化]を実行します。
ここで上図のようにパスデータを作成。
両方を選択して[ウィンドウ]>[パスファインダー]>[分割]を実行し、余分なパーツを削除して任意の色で塗り潰します。
そのまま[ウィンドウ]>[透明]にて[スクリーン]に設定。
または[ウィンドウ]>[透明]にて[乗算]に設定。
と説明したのですが、それよりも以下の処理の方がベストかも・・・。

ベースのドーナッツの表面を[表面:陰影(艶なし)]に設定します。
処理結果の選択して・・・
control C(command C)でコピーしてから
control 2(command 2)でロック
続けて
control F(command F)で同じ位置にペースとします。
ペーストしたドーナツの色を任意調整します。ここで、ペースとしたドーナッツの表面を[表面:陰影(艶有り)]に設定します。
続けて上の様なパスデータを作成(前記の逆)

両方を選択して[オブジェクト]>[クリッピングマスク]>[作成]を実行して完成です。コレで生地は艶無し、チョコは艶有りになります。

なお、3Dの階調のブレンド数は以下を参考にしてください。

TCDW8506 
触れてはいけないネタですね

Baby Alien 135
ダンゴムシ系(^o^)
昔、とあるパーティー会場で見かけた芸能人・・・身長は私よりも高いはずなのに、普通の革靴だった私の方が高かった。触れてはいけないネタですね(^o^)汗

火曜日, 8月 26, 2025

小型のアイロン台は廃棄HDDで決まり

愛用している小型アイロンの台に苦労していましたが、廃棄したHDD本体がベストでした。

1989年に父が購入したアイロン。2回ほどケーブルを交換しています。

廃棄用のHDDは中身以外は保存しているのですが、これがとてもベストマッチでした。

中身を廃棄したケースに載せるだけです。下に適当な板があれば完璧です。

TCDW8505 
楽して儲ける意識を捨てないと痛い目に遭いますよ〜

Baby Alien 134
Hooray man(^o^)
最近は動画制作やAI系の情報商材PRがネットに増えていますね。100%胡散臭いとは言いませんが、自己責任ですから口うるさく言うことはしません。ただ、楽して儲ける意識を捨てないと痛い目に遭いますよ〜。

月曜日, 8月 25, 2025

Blender Study Notes 60 
頂点とミラー編集での凹み処理

頂点とミラー編集での凹み処理を整理してみました。

ここでは立方体をベースに顔の基本形状を作成して見ます。

[モディファイアー]>[モディファイアーを追加]>[生成]>[サブディビジョンサーフェス]にて[ビューポートのレベル数]を[2]として適用してから・・・

[Auto Mirror]を設定してから頂点を選択し・・・

Blender Study Notes 45 シンメトリー処理はAutoMirrorで決まりですね 2025/01/14

右クリックで表示されるパレットから[頂点をベベル]にて・・・

頂点を面に変更します。

生成された面を選択し[面を差し込む]を2度実行し・・・

最後に生成された面を移動ツールで押し込みます。

ここで、モディファイアー]>[モディファイアーを追加]>[生成]>[サブディビジョンサーフェス]にて[ビューポートのレベル数]を[2]として凹みを確認します。必要に応じて調整します。コレで目の位置のベースが完成です。

[サブディビジョンサーフェス]を[シンプル]に切り換え、次に口を作成します。上図のような位置の面を選択し・・・

[ベベル]を実行し・・・

続けてもう一度[ベベル]を実行し・・・

一番小さい面を選択して押し込みます。

[サブディビジョンサーフェス]を[カトマルクラーク]に切り換えてイメージを確認します。コレで顔の基本形状が得られます。

Blender 4.5.0

TCDW8504 
時に罰じゃないこともあるので、プラマイゼロかも

Baby Alien 133
えっ、犬じゃないよ〜(^o^)
猛暑の時に限って外出の用が出来るのは、何の罰ゲームなのだろうか?  いや、時に罰じゃないこともあるので、プラマイゼロかもね。暑くて考えたくない(^o^)

日曜日, 8月 24, 2025

JavaScriptでAI遊び 63 
Illustratorでカラー設定の彩度を反転

特に目的は無いのですが、色相・彩度・明度の反転実験の彩度版です。
CMYKでもRGBでも使えます。

#target illustrator

function invertSaturation() {
var doc = app.activeDocument;
var selection = doc.selection;

if (!selection.length) {
alert("オブジェクトを選択してください。");
return;
}

for (var i = 0; i < selection.length; i++) {
var obj = selection[i];

if (obj.typename === "PathItem") {
// 塗りの色を処理
if (obj.filled) {
obj.fillColor = invertSaturationColor(obj.fillColor);
}
// 線の色を処理
if (obj.stroked) {
obj.strokeColor = invertSaturationColor(obj.strokeColor);
}
}
}

alert("選択したオブジェクトの彩度を反転しました。");
}

// 色の彩度を反転する関数
// RGBカラー:彩度(Saturation)を 100 - 現在の彩度 に変更
function invertSaturationColor(color) {
if (color.typename === "RGBColor") {
var hsb = rgbToHsb(color.red, color.green, color.blue);
hsb[1] = 100 - hsb[1]; // 彩度を反転
var newRgb = hsbToRgb(hsb[0], hsb[1], hsb[2]);

var newColor = new RGBColor();
newColor.red = newRgb[0];
newColor.green = newRgb[1];
newColor.blue = newRgb[2];
return newColor;

} else if (color.typename === "CMYKColor") {
// CMYKでの彩度反転(簡易的に補色を利用)
// CMYKカラー:
        // 補色の考え方を利用し、C, M, Y の値を反転(K はそのまま)
var newColor = new CMYKColor();
newColor.cyan = 100 - color.cyan;
newColor.magenta = 100 - color.magenta;
newColor.yellow = 100 - color.yellow;
newColor.black = color.black; // 黒は変更しない
return newColor;
}

return color; // 変更なし
}

// RGB → HSB 変換
function rgbToHsb(r, g, b) {
r /= 255; g /= 255; b /= 255;
var max = Math.max(r, g, b), min = Math.min(r, g, b);
var h, s, v = max;

var d = max - min;
s = max === 0 ? 0 : d / max;

if (max === min) {
h = 0;
} else {
switch (max) {
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
case g: h = (b - r) / d + 2; break;
case b: h = (r - g) / d + 4; break;
}
h *= 60;
}
return [h, s * 100, v * 100];
}

// HSB → RGB 変換
function hsbToRgb(h, s, v) {
s /= 100; v /= 100;
var c = v * s;
var x = c * (1 - Math.abs((h / 60) % 2 - 1));
var m = v - c;

var r, g, b;
if (h < 60) { r = c; g = x; b = 0; }
else if (h < 120) { r = x; g = c; b = 0; }
else if (h < 180) { r = 0; g = c; b = x; }
else if (h < 240) { r = 0; g = x; b = c; }
else if (h < 300) { r = x; g = 0; b = c; }
else { r = c; g = 0; b = x; }

return [(r + m) * 255, (g + m) * 255, (b + m) * 255];
}

// スクリプト実行
invertSaturation();
// RGBでは補色、CMYKでは黒の値が反転されるため、効果が異なります

左からCMYKで・・・
ベースチャート、カラー反転、カラー反転を2回実行

左からCMYKで・・・
ベースチャート、彩度反転、彩度反転を2回実行

左からRGBで・・・
ベースチャート、カラー反転、カラー反転を2回実行

左からRGBで・・・
ベースチャート、彩度反転、彩度反転を2回実行

TCDW8503
見たいと思わない作品もあって、ちょと不経済だったかも

Baby Alien 132
ベビー・マッチョ(^o^)
唐突に、もう一度見たくなる映画ってありますね。最近は映画館に出かける事もなくなってしまい、もっぱらオンライン系かDVDです。でも、コレクションの中には、世間的に名作なのにもう一度見たいと思わない作品もあって、ちょと不経済だったかも・・・。