木曜日, 9月 18, 2025

TCDW8528 
いつものように変な時空間に紛れてしまったのだろうか

白のレギングズにピンクの割烹着にしか見えないロングブラウスで、中尾彬風のネジネジのご婦人に地下鉄で遭遇・・・。最近のトレンド? もしかしていつものように変な時空間に紛れてしまったのだろうか(>_<)

水曜日, 9月 17, 2025

modoローポリモデリング 63 
対称化のエラーは鏡面で乗り切る

modo 17.1v1は、アップデートが望めないので、謎のエラー対策は重要ですね。ということで対称化の謎エラー対策です。

適当なオブジェクトを対称化すると・・・

コピーの形状がおかしなことになるケースが多いです。

[TAB]キーでサブディビジョンをオンorオフすると上のアラートが出ます。

何が問題なのかは確認できますが、修正は正直イライラしますので、諦めて・・・

鏡面を使います。

ただし、基準点の位置指定は画面をある程度拡大してから処理する必要があります。そうしないと、その後の対称処理が有効になりません。

modo 17.1v1 

TCDW8527 
8箇所もの集中砲火を浴びてしまったことが不気味

いつも周りの人は蚊の被害に遭っていても私は無傷だったのに、昨日は私だけが8箇所もの集中砲火を浴びてしまったことが不気味です。何で?

火曜日, 9月 16, 2025

PowerPointで単語の文字をバラバラにして爆縮イメージ作成

PowerPointで、単語の文字をバラバラにして爆縮(爆発の逆)イメージ作成する手順を整理しました。

ここでは9文字で構成されている単語なので放射線は40度置きに配置し、その上に文字を配置します。コレをJPG等で書き出してから背景に配置してアタリとするか・・・

そのまま[図形の書式]>[オブジェクトの選択と表示]にて全てのパーツをロックし、そのままアタリとします。

ここで、アタリのテキストのコピーを同じ位置に配置し・・・

テキストデータを隠すように矩形を作成し、全体を選択して[図形の書式]>[図形の結合]>[切り出し]を実行するとテキストデータはバラバラの図形になります。

余分なパーツを削除します。

ここから1文字ずつアニメーションを設定します。

90度の放射位置に1つ置きに図形化した文字を配置します。

[アニメーション]>[アニメーションの軌跡]>[直線]

次に、1つ目意外のアニメーションを全て[アニメーション]>[アニメーションウィンドウ]で[直前の動作と同時]に設定。90度の放射位置は1つ置きに配置しています。


この段階の動作状態です。

背景画像を変更し、文字図形の色を白に変更すれば完成です。
 

最終的な動作状態です。

TCDW8526 
桁違いにイイ感じの場合は黙っていることにしよう

急に流行だしたAIボーカルカバー。オリジナルより桁違いにイイ感じの場合は黙っていることにしよう。まっ、プロの歌手でも歌が下手な人は多いですからね(^o^)汗

月曜日, 9月 15, 2025

露出計シリーズ08 
【SEKONIC STUDIO DELUXE L-398】

学生の頃に頑張って購入した名機SEKONIC STUDIO DELUXE L-398。何度か触れていますが、悲しいことに同級生へコミック本数巻とともに貸し出したまま現在も戻ってきていません。

本格的に写真を勉強した頃の道具で、思い入れもあり出物を見つけたのでゲットしました。現行品はSTUDIO DELUXE III L398Aで仕様が少し変更されているので当時のSTUDIO DELUXE L-398を物色していたわけです。これは電池不要で完全なメカニカル構造なのが良いですね。

取扱説明書はメーカーサイトのPDFで確認できますが、流石に思い入れがあったようで直ぐに操作方法を思い出しました。調べたところ1963年に発売されたSTUDIO DELUXE L-28からデザインはほとんど変わっていないので60年以上続く名機ですね。


Panasonic LUMIX DMC-G3
LUMIX G VARIO 14-42mm/F3.5-5.6 ASPH

TCDW8525 
パーティーを開くのが流行っていました

Baby Alien 148
なんとかボール系(^o^)
小学生の頃は、お誕生会をそれぞれの家で友達を招いてパーティーを開くのが流行っていました。偶然当時の写真を見たのですが、月日は流れ・・・隣のクラスの友達とは交流がありますが、写真の中の友達との交流はなくなってしまいました。

日曜日, 9月 14, 2025

Photoshopでbit/channel別グラデーションの差異

Photoshopで基本的にあまり使うことがないbit/channelは8bit/channelがお約束です。しかし、グラデーションを意識する場合は16bit/channelがお薦めです。

8bit/channelでデフォルトの黒から白のグラデーション。

16bit/channelでデフォルトの黒から白のグラデーション。

グラデーションのままだとに肉眼ではあまり差異を感じませんが、ポスタリゼーションにすると境界部分に粗が出てきます。

8bit/channelでデフォルトの黒から白のグラデーションを[イメージ]>[色調補正]>[ポスタリゼーション]にて[階調数:10]を実行。

16bit/channelでデフォルトの黒から白のグラデーションを[イメージ]>[色調補正]>[ポスタリゼーション]にて[階調数:10]を実行。

8bit/channelの部分拡大。ノイズが目立っています。

16bit/channelの部分拡大。ノイズは確認できません。非常に綺麗です。もちろん処理後に8bit/channelに戻しますが、戻しても処理結果は変わらないので、グラデーションは16bit/channelで処理してから8bit/channelに戻す流れがベストですが、サイズなども考慮するとケースバイケースですね。

TCDW8524 
見える人であり続けたいものです

計算通りに収まらない場合も、視点を変えると予想外の面白い結果が見えてきますね。いや、見える人であり続けたいものです。

土曜日, 9月 13, 2025

明瞭さ、読みやすさを追求した intel-one-monoフォント

Intelが開発したコーディング向け等幅フォント Intel One Mono は、ロービジョン(弱視)開発者のために、明瞭さ、読みやすさを追求したフォント。商用利用や改変、アプリ・ゲームなどへの組み込みも可能だそうです。和文は未対応ですが組み合わせで任意のフォントと組み合わせれば使えますね。ロービジョンではなくても可読性が高くて使い勝手がいいです。


Intel One Mono Regular + メイリオ Regular

Intel One Mono Italic + メイリオ Regular

Intel One Mono Light + メイリオ Regular

Intel One Mono Light Italic + メイリオ Regular

Intel One Mono Medium + メイリオ Regular

Intel One Mono Medium Italic + メイリオ Regular

Intel One Mono Bold + メイリオ Bold

Intel One Mono Bold Italic + メイリオ Bold

TCDW8523 
YouTubeで時々音楽を聞いていると

YouTubeで時々音楽を聞いていると、思い出した曲や、知らなかった曲にワクワクしています。直ぐに原曲を調べてURLをメモ。チョットいい時代ですね〜と遠い目。

金曜日, 9月 12, 2025

JavaScriptでAI遊び 67 
Illustratorでスピログラフを描画


Illustratorでスピログラフを描画させてみました。

■スピログラフのパラメータ
外側の固定円(半径 R)
内側の回転円(半径 r)
描画点の距離 d(内円の中心からの距離)
ステップ数 s(1ユニットのパス数)
角度 θ(回転角)

■スピログラフの方程式
スピログラフの曲線 (x, y) は、以下のパラメータ方程式で表されます。

基本形(ハイポサイクロイド)
x(θ)=(R-r)cos(θ)+d cos(((R-r)r)θ)
y(θ)=(R-r)sin(θ)-d sin(((R-r)r)θ)

ここで:

θ は回転角(0 から 2π × ループ回数 まで変化)
(R - r) の比が整数であれば閉じた軌跡になる

#target illustrator
function drawSpirograph(doc, centerX, centerY, R, r, d,
        steps, rotations) {
var path = doc.pathItems.add();
path.stroked = true;
path.filled = false;
path.strokeWidth = 1;
var points = [];
for (var i = 0; i <= steps * rotations; i++) {
var theta = (Math.PI * 2 * i) / steps;
var x = (R - r) * Math.cos(theta) +
            d * Math.cos(((R - r) / r) * theta);
var y = (R - r) * Math.sin(theta) -
            d * Math.sin(((R - r) / r) * theta);
points.push([centerX + x, centerY + y]);
}
var pathPoints = path.pathPoints;
for (var j = 0; j < points.length; j++) {
var p = pathPoints.add();
p.anchor = points[j];
p.leftDirection = p.anchor;
p.rightDirection = p.anchor;
}
}

// ユーザー入力ダイアログを表示
function getUserInput() {
var dialog = new Window("dialog", "スピログラフ設定");
dialog.add("statictext", undefined, "外円の半径 (R):");
var RInput = dialog.add("edittext", undefined, "150");
RInput.characters = 5;
dialog.add("statictext", undefined, "内円の半径 (r):");
var rInput = dialog.add("edittext", undefined, "70");
rInput.characters = 5;
dialog.add("statictext", undefined, "ペンの距離 (d):");
var dInput = dialog.add("edittext", undefined, "100");
dInput.characters = 5;
dialog.add("statictext", undefined, "ステップ数:");
var stepsInput = dialog.add("edittext", undefined, "200");
stepsInput.characters = 5;
dialog.add("statictext", undefined, "回転数:");
var rotationsInput = dialog.add("edittext", undefined, "10");
rotationsInput.characters = 5;
var okButton = dialog.add("button",
        undefined, "OK", {name: "ok"});
var cancelButton = dialog.add("button",
        undefined, "キャンセル", {name: "cancel"});

var result = null;
okButton.onClick = function () {
result = {
R: parseFloat(RInput.text),
r: parseFloat(rInput.text),
d: parseFloat(dInput.text),
steps: parseInt(stepsInput.text, 10),
rotations: parseInt(rotationsInput.text, 10)
};
dialog.close();
};
cancelButton.onClick = function () {
result = null;
dialog.close();
};
dialog.show();
return result;
}

// メイン処理
function main() {
if (app.documents.length === 0) {
app.documents.add();
}
var doc = app.activeDocument;
var centerX = doc.artboards[0].artboardRect[2] / 2;
var centerY = doc.artboards[0].artboardRect[3] / 2;

var userInput = getUserInput();
if (!userInput) return;

drawSpirograph(doc, centerX, centerY, userInput.R, userInput.r,
        userInput.d, userInput.steps, userInput.rotations);
}

main();

実行して、各パラメーターの値を入力すれば描画が実行されます。パスの塊です。

パラメーター変更例(その1)

パラメーター変更例(その2)

パラメーター変更例(その3)

TCDW8522 
残りの50%は一体全体どこに行った?

昨日の集中豪雨は凄かったですね〜。行政からの河川氾濫注意のアラートが2回・・・でもライブカメラで確認すると雨が止んだ時点で水位は50%。残りの50%は一体全体どこに行った?

木曜日, 9月 11, 2025

Let's start JavaScript 82 
HTMLで複数の数値で作れる合計全表示

必要にせまられたので・・・
HTMLで複数の数値から作れる合計を重複を除きすべて表示させます。
例えば・・・
1,2,3の場合・・・ 1 2 3 1+3=4 2+3=5 1+2+3=6 となります。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>合計組み合わせ</title>
<style>
body {
font-family: sans-serif;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
background: black;
color: white;
}
input {
width: 200px;
padding: 5px;
}
</style>
</head>
<body>
<h3>複数の数値から作れる合計をすべて表示</h3>
<p>数値を入力してください(半角, 区切り):</p>
<span>
<input type="text" size="28" id="inputNumbers"
        value="7,14,28,9,16,30">
&ensp;
<button onclick="showSums()">合計を表示</button></span>
<h4>合計一覧(重複なし)</h4>
<div id="results"></div>
<script>
function showSums() {
const input = document.getElementById('inputNumbers').value;
const numbers = input.split(',').map(n =>
        parseInt(n.trim(), 10)).filter(n => !isNaN(n));
const resultSet = new Set();

const n = numbers.length;
for (let i = 1; i < (1 << n); i++) {
let sum = 0;
for (let j = 0; j < n; j++) {
if (i & (1 << j)) {
sum += numbers[j];
}
}
resultSet.add(sum);
}

const sortedSums =
        Array.from(resultSet).sort((a, b) => a - b);
document.getElementById('results').innerHTML =
        sortedSums.join(', ');
}
</script>
</body>
</html>



実行直後の画面。



デフォルト値のまま[合計を表示]をクリックすれば、複数の入力数値から作れる合計を重複を除きすべて表示します。



入力値はボックスに入力できるまで入れることが出来ます。