概要
Poline は、 極座標 を活用した独創的なカラーパレット生成ライブラリ。 アンカー間の線引き による魔術的な色配置が特徴。 TypeScript製 のマイクロライブラリで、柔軟なカスタマイズが可能。 HSL値 や関数による色分布制御、ループ化やヒューシフトなど多彩な機能。 MITライセンス 下で公開、誰でも利用・貢献が可能。
Polineとは何か
- Poline は、 極座標系 の魔術的なロジックで色を生成するカラーパレットジェネレーター
- 従来のカラーモデル に縛られず、20世紀初頭の 神秘的な知識 を活用
- アンカー間に線を引く ことで、他にない独特なパレットを作成
- TypeScript製マイクロライブラリ、軽量かつ拡張性に優れる
- 現代の ジェネレーティブアート制作者 必携のツール
Terminology & Working Principles(用語と原理)
- Poline は" polar line "(極座標+線)の造語
- アンカー :色生成の起点となるHSL値(例:[h, s, l])
- アンカー間のポイント数 が多いほど、生成される色数が増加
- ポジション関数 でアンカー間の色分布を定義
- TypeScript で記述された、柔軟な設定が可能なライブラリ
召喚(基本の使い方)
- Poline のインスタンス生成でパレット作成開始
- 引数なしで呼ぶと、ランダムなアンカー2点で自動生成
- HSL値リスト で任意のアンカーを指定可能
- 最低2つのアンカー が必要、数に上限なし
- アンカー数が増えるほど、調和のとれたパレット作成が難しくなる傾向
ポイント(色数の制御)
- アンカー間の線上 にプロットされるポイント数がパレットの豊かさを決定
- デフォルトは 4ポイント、
numPointsプロパティで変更可能 - パレット全体の色数は「ポイント数×アンカーペア数」で決定
- インスタンス生成後も
numPointsで動的に変更可能
アンカーの操作
- アンカーは HSL配列 または XYZ座標 で追加可能
addAnchorPointで新規アンカー追加updateAnchorPointで既存アンカーの色や位置を変更可能- 柔軟なパレット調整が可能
ポジション関数(色分布の制御)
- ポジション関数 は0~1の値を別の0~1にマッピング
- デフォルトは sinusoidalPosition (正弦波型)
- 他にもlinear, exponential, quadratic, cubic, quartic, asinusoidal, arcなどを選択可能
- 各軸(X:ヒュー/ライト、Y:ヒュー/ライト、Z:サチュレーション)ごとに関数を指定可能
- 関数ごとに異なるアーク(曲線)を描き、独自の色分布を実現
ループ化とヒューシフト
- デフォルトでは パレットは非ループ (最初と最後の色が異なる)
closedLoopをtrueに設定すれば ループパレット 化可能- 生成後も
poline.closedLoopで動的に切替可能 - ヒューシフト 機能で全色のヒューを任意量だけシフト
- パレットのアニメーションや類似パレットの生成に最適
- シフト量は -Infinity~Infinity の実数値
最近傍アンカーの取得
- 指定座標や色に 最も近いアンカー を取得可能
poline.getClosestAnchorPoint({xyz: [x, y, null], maxDistance: .1})- maxDistanceを超える場合はnull返却
- xyzやhsl値の任意成分をnull指定で無視可能
色リストの取得
- HSL配列 または CSS文字列 形式で全色を取得
poline.colors(HSL配列)poline.colorsCSS(CSS HSL表記)poline.colorsCSSlch(LCH表記)poline.colorsCSSoklch(OKlch表記)
アンカーの削除
removeAnchorPointでアンカー削除- アンカー参照またはインデックスで指定
ライトネスの反転
- デフォルトでは ライトネス0が中心、1が外周
invertLightnessで 0が外周、1が中心 に反転可能- パレットに神秘的な雰囲気を付与
カラーモデル
- デフォルトで HSLモデル のみサポート
- 他モデル利用時は culori 等の外部ライブラリ併用推奨
インストール方法
- npmパッケージ として配布
npm install poline
- GitHubクローン も可能
- unpkg CDN からmjs/umd形式でインポート可能
- 例:
import { Poline } from 'https://unpkg.com/poline?module'
- 例:
ライセンス・著作
- MITライセンス、オープンソース
- Anatoly Zenkov のアイデアに着想を得て開発
- バグ報告や提案はGitHub Issueで受付
- デスクトップ環境 での利用推奨(Playgroundの全機能発揮のため)
作者からのメッセージ
- Poline の進化にはユーザーの協力・支援が不可欠
- コントリビューション、コーヒー、スポンサー、口コミなど歓迎
- 一緒に色彩の魔法を探求する旅へ