三次元書道

by ArduinoDeXXX in Circuits > Art

8051 Views, 4 Favorites, 0 Comments

三次元書道

3D_Calligraph_m.jpg

現実の三次元空間に「エア書道」で字を書いて、それを仮想空間に描いてみましょう。パソコンとArduinoがあれば、残りの材料(と予算)は少しでOKです。

【経緯】
安価なジャイロ加速度計を使った工作をやった後、同じ道具立てで、ライト・ペインティングに似たことができそうな気がしました。「ライト・ペインティング(Light Painting)」とは、暗闇に置いたカメラの前でライトを動かして、字や絵を描くアレです(参考1参考2)。その三次元版は、既に「モーション・キャプチャ(motion capture)」の名で実用化されていますが、ここではもっとずっと簡素な道具立てで臨みます。

【紹介動画】


【方法論】

  1. ブレッドボードにジャイロと加速度計を取り付けて、これを「」に見立てる
  2. 」を手に持って、空間に字(もしくは絵)を書く
  3. 」に加わる「回転」と「力」を、Arduino経由でパソコンに記録する
  4. この記録をProcessingで処理して、三次元空間における「」の軌跡を求める
  5. この軌跡をExcelで修正する(手作業)
  6. 修正した軌跡をProcessingで「作品」として描く


標準的なモーション・キャプチャが、カーナビのGPSモードだとすると、この方法論は自律モードに相当します。自律モードでは、GPSの大域的な外部情報を使わないので、位置評価の誤差が累積してしまいます。

それを承知で作業を始めたのですが、実際にやってみると予想以上に大変でした。喩としては、むしろ目隠しでクルマを運転する方が近いです。外が見えない状態で、ハンドル、アクセル、ブレーキの操作記録だけで運転する、と言えばその難しさが伝わるでしょうか。さらに今回、上下の動きも加わるので、重力とその他の力の区別も必要になります。

このため、評価誤差の自動的な補正には限界があります。なので、最終的には手作業で修正します。画数が多くなると、この手作業が結構大変になりますが、技術的な困難を実感しながら、一期一会の動きを「作品」にできれば、それなりの達成感は得られると思います。

「筆」の材料を集める

IMG_3414m.jpg

Arduinoで工作をやったことがある人なら、新たに入手が必要な部品は少数だと思います。


<補足1>

抵抗は、プッシュ・スイッチoffのプル・ダウン用です。ステップ3のスケッチで 「analogRead(A5)」 の代わりに 「pinMode(X, INPUT_PULLUP)」 と 「digitalRead(X)」 を使えば、この抵抗は不要です(Xは空いているデジタル・ピンの番号)。この場合、スイッチon/offの出力値(1,0)が逆転するので、配線の変更とともにスケッチの変更も必要になります。

<補足2>
2つのセンサ・モジュールはいずれも秋月電子製です。ただし、搭載しているセンサはSTマイクロ製のデジタル出力センサなので、同社のセンサを載せた互換品なら、たぶん代替できると思います(配線の変更は必要かもしれません)。

「筆」を組み立てる

IMG_3422m.jpg
IMG_3404m.jpg
Untitled Sketch_3dC_J.jpg

簡単な構造なので、15分もあれば組み立てられると思います。注意が必要なのは、2つのセンサ・モジュールの取り付け位置(方向)です。

完成した「筆」を机上に置いた時、ブレッド・ボードと2つのセンサ・モジュールの位置(方向)が、配線図(本ステップの冒頭画像の下段右側)と一致するようにしてください。

【作業手順】

  1. Arduinoとブレッド・ボードを、用意した板の上に並べて輪ゴムで固定する
  2. この時、Arduinoとブレッド・ボードの配置は、配線図と一致させる
  3. 2つのセンサ・モジュール(ジャイロと加速度計)をブレッドボードに取り付ける
  4. この時、2つのセンサ・モジュールの取り付け方向は、配線図と一致させる
  5. プッシュ・スイッチをブレッドボードに取り付ける
  6. 配線図を見て、ジャンパ・ワイヤを取り付ける
  7. ArduinoとパソコンをUSBケーブルで接続する

「筆」のプログラムを用意する

IMG_3426m.jpg

前ステップで組み立てた「筆」は、2つのセンサが付いてます。これらのセンサは、「筆」にかかる回転を16ビットの整数で出力します(*)。

(*)重力については、机や手といった支持物体からの抗力を計測します

そしてこの出力値は、「筆」に取り付けたArduinoを経由してパソコンに送られます。この送信に必要なArduinoのスケッチは、本ステップ末尾に添付したpdfファイル「calligraphy_0_brush_ardu.pdf」に収められています。ここでは、このpdfファイルをパソコンにダウンロードして、その内容をArduinoにアップロードします。

【作業手順】

  1. calligraphy_0_brush_ardu.pdf」をパソコンにダウンロードする
  2. ダウンロードしたpdfファイルを、Adobe Reader等の専用ビューアで開く
  3. ファイルの内容すべてをコピーして、ArduinoのIDEに貼り付ける
  4. IDEでミスプリを修正する
  5. 修正したスケッチをArduinoにアップロードする


■解説(1)
pdfファイルのアイコンが見えない時は、アドレス・バーのURLの最後の「?lang=ja」を削除してページを更新してください。また、リンク先のpdfファイルはブラウザで開くのではなく、必ずパソコンにダウンロードして専用のビューアで開いてください。なお、pdfファイルの内容をコピーしてエディタに貼り付けると、ミスプリが生じることがあります。主なミスプリは、「//」の間にスペースが入ること「/ /」です。これらのミスプリはIDEのエディタで修正してください。

「筆」の状態の記録準備をする

folder_rawdata.jpg

フリーソフトの「Processing」を使って、Arduinoから送られるデータをcsvファイルに保存します。このProcessingのスケッチは、本ステップ末尾に添付したpdfファイル「calligraphy_1_capture.pdf」に収められています。

ここでは、このpdfファイルをパソコンにダウンロードして、その内容をProcessingの統合エディタ(PDE)に貼り付けて、適当なディレクトリに保存します。

【作業手順】

  1. calligraphy_1_capture.pdf」をパソコンにダウンロードする
  2. ダウンロードしたpdfファイルを、Adobe Reader等の専用ビューアで開く
  3. ファイルの内容すべてをコピーして、Processingの統合エディタ(PDE)に貼り付ける
  4. PDEでミスプリを修正する
  5. サンプル・スケッチの9行目のポート番号(5)を、自分のArduinoのポート番号に変更する
  6. 修正したスケッチを適当なディレクトリに「calligraphy_1_capture.pde」の名前で保存する


■解説(2)
Processingは映像デザインのフリーソフトです。しかし、ここで使う機能は、シリアル通信とその記録機能だけです(本来の使い方ではないです)。このインストラクタブルでは、あと2つProcessingのスケッチを用意しています。これらは、映像デザインの機能を使います。なおProcessingの導入については、以前の投稿を参照してください。またpdfの内容のコピーとスケッチの実行については、前ステップの解説(1)を参照してください。

Arduinoから送られるデータをパソコンに記録する

ooutput1.jpg

ステップ3で用意した Arduinoをパソコンに繋いで、前ステップのProcessingのスケッチ「calligraphy_1_capture.pde」をパソコン上で実行します。

これにより、「筆」にかかる回転と力のデータが、csvファイルに自動的に格納されます。ここでは、このcsvファイルをExcel等のアプリケーションで開いて、ファイルの内容を確認します。

【作業手順】

  1. ステップ3で用意したArduinoをUSBケーブルでパソコンにつなぐ
  2. 前ステップで用意したProcessingのサンプル・スケッチをPDEで開く
  3. PDEの「Run」ボタンをクリックして、スケッチを実行する
  4. 描画画面が開いて、観測データのカウンタが増えていくのを確認する
  5. 十分なデータを確保したら、描画画面をクリックして、適当なキーを押す
  6. 描画画面が閉じられる
  7. スケッチを保存したフォルダの中に、新たに「rawData.csv」が作られていることを確認する
  8. rawData.csv」をExcel等のソフトで開いて、8列の数値が保存されていることを確認した後、このファイルを閉じる


■解説(3)
自動的に作られる「rawData.csv」は、Arduinoから送られたデータ(8変数)が、下に向かって時系列に並んでいます(本ステップ冒頭の画像参照)。この内、最初の20行ほどは、データ取得の初期ノイズなので削除(行削除)してください。(1行目からデータが始まるようにしてください。冒頭に空白の行があると、その後の処理でエラーが出ます)

格納された8列の内、一番左は、経過時間(マイクロ秒)が並んでいます。また、2~4列目は、X、Y、Z軸周りの角速度に関する計測値で、5~7列目は、X、Y、Z軸方向のに関する計測値です。そして、一番右の8列目が、プッシュ・スイッチのon/off(1, 0)を表します。

【補足】

ここで使用したデジタル出力のジャイロや加速度センサは、出力値に異常が生じることがあります。この場合の対処法は別の記事「もう一つの倒立振子」のステップ1の【注意】を参照してください。

「筆」の特徴を知る(その1)

axis.jpg
6axis.jpg
6axis_test.jpg

使用する2つのセンサ・モジュール(ジャイロ加速度計)は、それぞれ3つの軸(X, Y, Z)を持ち、軸毎に角速度や力を計測します。Arduinoは、これら6つの数値を受け取り、経過時間(マイクロ秒)とプッシュ・スイッチの状態(on/off)を加えた8変数をパソコンに送信します。

ただ、センサ・モジュールには個別性があるため、軸の名前(X, Y, Z)方向(出力の符号)が、モジュールによって異なる可能性があります(*)。そこでまず、用意した「筆」に関して、座標軸の「標準」を定めました。その具体的な内容は本ステップ冒頭の写真画像で確認してください。

(*)同じ型番のジャイロ・モジュールを2つ用意して試したところ、2つの軸で出力の符号が異なっていました

そして、この「標準座標」を基準にして、使用するモジュールの個別性を確認します。その結果、標準座標と異なる結果が得られた場合、ステップ3で用意したArduinoのスケッチを修正します。これにより、パソコンに送るデータが標準座標と整合的なものになります。

【作業手順】

  1. 前ステップの作業手順1~3を行い、「筆」にかかる回転と力の記録を開始する
  2. 標準座標のX軸周りに、「筆」をプラス方向(手前側)に約45度傾けた後、元に戻す
  3. 同様の操作を、標準座標のY軸周りとZ軸周りについても順次実行する
  4. 標準座標のX軸のプラス方向に「筆」を20cmほど素早く動かして止める
  5. 同様の操作を、標準座標のY軸周りとZ軸周りについても順次実行する
  6. 適当なキーを押してProcessingの描画画面を閉じる
  7. 上書きされた「rawData.csv」をExcelで開く
  8. 2~7列目のデータを折れ線グラフにする(本ステップの画像参照)
  9. 大きな「山」が一つ描かれた後に、同様の「谷」が描かれることを確認する
  10. この山と谷の位置が、右側の列のグラフほど後の方(右側)に描かれることを確認する
  11. 上記2点と異なる傾向が認められた時は、解説(5)を参照してスケッチを修正する


■解説(4)
STマイクロと秋月の説明書によると、ジャイロ加速度計のモジュールは、3軸の名前が共通です。しかし、Z軸(上下方向)以外の2軸については、正負の向きが逆です。上述の「標準座標」は、軸の方向は加速度計の説明書に合わせ、各軸周りの回転方向はジャイロの説明書に合わせました。このため、標準座標の軸方向と回転方向の組み合わせはやや一貫性を欠いています。

なお、この標準座標は「筆」に固定されています。したがって、「筆」を手で動かすと、現実の三次元空間に固定された座標(絶対座標)の中で、この標準座標が動きまわります。ステップ10では、標準座標での情報をProcessingで処理して、「筆」の動きを絶対座標で評価します。この時、Processingの絶対座標は、「筆」を机上に置いた時の標準座標とは、軸の名前や方向が異なりますステップ12の修正(手作業)では、この点に注意してください(*)。

(*)「筆」を机上に置いた時の標準座標(Xd, Yd, Zd)と、Processingの絶対座標の対応は次の通りです
   Processing(Xp, Yp, Zp)=(-Xd, -Zd, Yd)

■解説(5)
ここでは、「筆」にかかる回転と力に関して標準座標をまず定めました。そして実際に「筆」を動かして、その出力がこれと合致するか確認しました。この確認は、出力ファイルの2~7列目をそれぞれ折れ線グラフにして、目視で行っています(本ステップの画像参照)。

上記の手順に従って「筆」を動かした場合、「筆」の動きに合わせた「山」と「谷」のセットが各グラフに1つ現れます。また、この山→谷の位置は、右側の列ほどグラフの右側(後ろの方)にシフトするはずです。

一方、これらの位置のシフト山→谷の順番が正しくない場合、センサ・モジュールの座標軸が標準座標と一致していないことになります。この場合、ステップ3のArduinoのサンプル・スケッチを修正して、プログラム上でこの不一致を是正します。

具体的には、このスケッチの58~63行目の幾つかを修正します。まず、山谷の位置が順次後方(右方)にシフトしない時は、軸の名称に不一致があります。この場合、これらの行の順番を変えて、シフトの乱れを修正してください。次に、山と谷の順番が逆転しているときは、軸の方向が逆になっています。この場合は、該当する軸を調べて、引数に「-」 を付けてください(例えばX軸周りの回転方向が逆転している場合、「rx」を「-rx」に書き換える)。

「筆」の特徴を知る(その2)

360degree.jpg

前ステップでは、「筆」に関する標準座標を定めて、2つのセンサ・モジュール(ジャイロと加速度計)の出力をこれに合わせる手続きを行いました。これにより、パソコンに送られるデータは標準座標と整合的になります。一方、個々のセンサ・モジュールは、出力値の「大きさ」についても固有のバイアスがあります。

この出力値のバイアスは、ジャイロについて特に問題になります。そこでここでは、「筆」を適当な軸周りに1回転させて、このバイアスの大きさを評価します(何回か繰り返して平均値を使うのが良いと思います)。なお、この評価の結果はステップ10で利用します。

【作業手順】

  1. 「筆」を机上に置き、その位置が分かるように、テープ等で机にマーキングする
  2. ステップ5作業手順1~3を行い、「筆」にかかる回転と力の記録を開始する
  3. 「筆」をX軸周りに一回転させて元の位置に戻す
  4. 「筆」をY軸周りに一回転させて元の位置に戻す(省略可)
  5. 「筆」をZ軸周りに一回転させて元の位置に戻す(省略可)
  6. 適当なキーを押してProcessingの描画画面を閉じる
  7. 上書きされた「rawData.csv」をExcelで開く
  8. 1~4列目のデータを使って、角度の変化を計算する(方法は解説(6)参照)
  9. X軸周りの角度の変化Rxと360度の比(360 / Rx)を求める
  10. Y軸(もしくはZ軸)周りの角度の変化Ry(もしくはRz)と360度の比を求める(省略可)


■解説(6)
rawData.csv」の1列目と2列目の数値から、経過時間t(マイクロ秒)とX軸周りのジャイロの出力rxの系列を得ます。そこで、観測の時間間隔⊿t(=tの増分)を求めて、rxとの積算( Σ(rx ×⊿t) )を計算し、さらに換算係数「0.00875×10-6」を乗じると、X軸周りの角度の変化Rxの評価値を得ます。ジャイロの出力にバイアスがなければ、その評価値は平均的に360度になるはずです。Y軸もしくはZ軸周りに一回転させた場合は、2列目に代えて3列目もしくは4列目の数値(ry、rz)を用いてください。

三次元空間に字を書く(エア書道)

IMG_3394mm.jpg

ステップ2~3で用意した「筆」を使って、現実の三次元空間に字を書きます。ただ、紙や物体の表面に物理的な痕跡を残すわけではないので、この段階では「エア書道」と呼んだ方がよいかもしれません。

字を書くときは、「筆」のブレッド・ボードに取り付けたプッシュ・スイッチを押し続けます。現実の書道で言うと、スイッチを押し続けている「長押し」の状態は、墨を付けた筆を紙の上に置いている状態に相当します(*1、*2)。

(*1)イントロで紹介したライト・アートで言うと、カメラの前でライトを点灯している状態です
(*2)「クリック」に準じた短いon/offは、「長押し」とは区別されます(詳細は後述)

一方、ジャイロと加速度センサの計測値には誤差が含まれるため、「筆の位置」の評価の誤差は、それこそ加速度的に増加します。このため、この累積誤差をこまめにキャンセルする必要があります。そこで出てくるのが「硯(すずり)」に準じた基準点の導入です。

具体的には、10cm四方ほどの小さな台(小皿やマグカップなど)を机上に置き、これを「」に見立てます。そして、空間に1画(もしくは2、3画)書く度に、「筆」をこの「」の上に戻して、「筆」の位置の評価値をリセットします。

この一連の操作において、(1)「筆」を「」から持ち上げる前と、(2)「筆」を「」にもどした後の記録は重要です。ここでは、これらの記録をプッシュ・スイッチの短いon/off、いわば「クリックによる合図」で表現します。

【参考動画】


【作業手順】

  1. 」に見立てる小さな台を机上に置く
  2. 「筆」に見立てたブレッド・ボードをこの「硯」の上に置く
  3. ステップ5作業手順1~3を行い、「筆」にかかる回転と力の記録を開始する
  4. 描画画面のカウンタが500を超えるまで、「」の上で「筆」を静止させる
  5. カウンタが500を超えたら、」の上に「筆」を置いたまま、プッシュスイッチを短く2回on/offする(ダブル・クリック
  6. 「筆」持ちあげて、文字の「画」を書き始めるポイントまで動かす
  7. プッシュ・スイッチを長押しして、空間に「画」を書き始める
  8. スイッチを押したまま「画」の書き終わりのポイントまで「筆」を動かす
  9. 書き終わりのポイントになったら、プッシュ・スイッチをoffにする
  10. 「筆」を机上の」の上に戻して、プッシュ・スイッチを短く1回on/offする(シングル・クリック
  11. 1~2秒ほど「筆」を静止させる
  12. プッシュ・スイッチをダブル・クリックして、次の画を書く動作に入る
  13. 全ての画を書き終えたら、パソコン上の描画画面をマウスでクリックして、適当なキーを押す
  14. 描画画面が閉じて、フォルダ内の「rawData.csv」が上書きされていることを確認する


■解説(7)
「筆」の移動速度によって、最終的な文字の線の太さと濃淡を変えることができます。筆を止めると太くて濃くなり、筆を早く動かすと細くて薄くなります。これにより、書道のダイナミックな線を表現できます。

記録の確認と修正

pushSwich_operation_J.jpg
pushSwitch_abc.jpg

前ステップの操作で上書きされたcsvファイル「rawData.csv」を開いて、スイッチ操作の記録を確認します。csvファイルのデータの一番右側の列(8列目)が、スイッチのon/offの記録です。

この系列を折れ線グラフで表すと、(1)短いonが2回(- -)現れた後、しばらくして、(2)画を書く間の長いon(------)が現れて、またしばらくして、(3)短いonが1回(-)現れる、というサイクルが文字の画数だけ確認できるはずです(本ステップ冒頭の2枚の画像参照)。

【作業手順】

  1. 上記の折れ線グラフを描く
  2. 各サイクル毎に、開始時点の短いonが2回、終了時点の短いonが1回あることを確認する
  3. 短いon(合図)の数は、「サイクルの総数×3」になる
  4. 次に、画を書いた時のonの長さ(観測数)を、画ごとに確認する
  5. onの長さが一番「短い画」と、onの長さが比較的長い「合図のon」の長さを比較する
  6. もし前者(一番短い画)よりも長い「合図のon」がある場合、これらの「合図のon」の長さを、この画の長さよりも短くする(スプレッドシート上で、1を0に書き換える)
  7. その上で、「一番長い合図の長さ < 65 < 一番短いの長さ」 の関係が満たされているか確認する
  8. もしこの関係が満たされていない場合、下記の解説(8)を参照してスケッチを修正する


■解説(8)
次のステップでは、onの長さによって、(A)動作の開始/停止の合図なのか、(B)を書いているのか、プログラムで自動判定します。一方、短い画を勢いよく書くと、その長さが「合図のon」の長さを下回ることがあります。この場合、スプレッドシート上で、前者(A)の長さを手作業で縮めて、両者の大小関係を確保する必要があります。

なお、(A)合図と(B)描画を区別する境界の長さは、デフォルトで「65」です。もし上記の確認や修正を行った後、この境界が不適当な状態であれば、次のステップのスケッチ「calligraphy_2_transform.pde」の33行目の基準値(65)を適当に変更してください。

「筆」の軌跡の計算

motion.jpg

「筆」にかかる回転と力は、「筆」に固定された標準座標で計測されます。しかし、「筆」で空間に字を書くと、この標準座標自体が、現実の空間に固定された座標(絶対座標)の中で動きまわります

最終的な文字は、現実の空間における「筆」の動きの軌跡(の一部)として描かれます。このため、標準座標での記録を使って、現実の空間における「筆」の動きを描き直す必要があります。

これはなかなか大変な計算ですが、Processingの機能を使うと比較的簡単に求めることができます。この計算に使うスケッチは、本ステップ末尾のpdfファイル「calligraphy_2_transform.pdf」に格納しています。このため、まずステップ4と同じ手順で、これをパソコンにダウンロードして、その内容をProcessingのスケッチ「calligraphy_2_transform.pde」として適当なディレクトリに保存してください。

【作業手順】

  1. 上記の要領で「calligraphy_2_transform.pde」を保存した後、前ステップで確認・修正したcsvファイル「rawData.csv」を、このスケッチと同じフォルダにコピーする
  2. calligraphy_2_transform.pde」をProcessingの統合エディタ(PDE)で開く
  3. このスケッチの43行目の係数(1.02)をステップ7で求めた比率(=360 / Rx)に置き換えて、スケッチを上書き保存する
  4. 上書きしたスケッチを統合エディタで実行する
  5. 描画画面が開いて、「筆」に取り付けたブレッドボードの動きが再現される(累積誤差を含む)
  6. 全ての画を書き終えたら、描画画面が自動的に閉じて、上記のフォルダ内に「syodo.csv」が自動的に作成される

<注意>
Processingの処理で、参照対象となるcsvファイルを開いたままだとエラーが出ます。参照ファイルを閉じてからProcessingのスケッチを実行(Run)してください


■解説(9)
一連の操作で自動作成(もしくは上書き)されるcsvファイル「syodo.csv」には、現実の空間における「筆」の軌跡の評価値が格納されています。なお、「calligraphy_2_transform.pde」を実行してしばらくすると、仮想空間に描かれたボードが描画画面の外に出てしまい見えなくなることがあります。しかし、処理は続いているので、処理が終わって自動的に閉じるまで、描画画面には触れないでください。

■解説(10)
ある画を「筆」で書く時、「筆」は「硯」から離れて「硯」に戻ります。このため、両時点の「筆」は、現実にはほぼ同じ位置にあります。しかし、センサの出力誤差の累積により、その評価には相当のずれが生じます。ここで自動作成されたcsvファイルsyodo.csv」には、このずれが含まれています。このずれは、次のステップで用意したProcessingのスケッチ「calligraphy_3_final.pde」で自動的に概略修正されます。

計算された「筆」の軌跡を確認

abc.jpg

前ステップで作成した「syodo.csv」を使って、Processingの仮想空間に文字を描きます。この文字を描くためのProcessingのスケッチの内容は、本ステップの末尾に添付したpdfファイル「calligraphy_3_final.pdf」に格納しています。

前ステップと同じ手続きで、このファイルの内容を「calligraphy_3_final.pde」の名で適当なディレクトリに保存してください。その上で下記の作業を行うと、現実の三次元空間に書いた「字」が誤差込みで仮想空間に描かれます。

【作業手順】

  1. calligraphy_3_final.pde」を保存したフォルダに、前ステップで作成(もしくは上書き)された「syodo.csv」をコピーする
  2. calligraphy_3_final.pde」をProcessingの統合エディタで実行する
  3. 描画画面が開いて、現実の空間に描いた「字」が仮想区間上に誤差込みで描かれる
  4. 描画面上でマウスのポインタを動かすと、視点が移動する

<注意>
Processingの処理で、参照対象となるcsvファイルを開いたままだとエラーが出ます。参照ファイルを閉じてからProcessingのスケッチを実行(Run)してください


■解説(11)
「syodo.csv」に含まれる「筆」の位置評価の誤差の内、「画の形」の誤差は、「calligraphy_3_final.pde」によって自動的に概略修正されます。しかし、それぞれの「画の配置」の誤差は残ります。

CSVファイルを修正して「作品」を仕上げる

abc_m.jpg
syuuusei.jpg

「画」が少ない「字」であれば、視点を上手く選ぶことで、書こうとした「字」に見えます(例1例2)。しかし、少し画数が多くなると、視点の変更だけでは、想定した「字」に見えないと思います。その主な原因は、「画の配置」のずれです。

一方、一つ一つの「画の形」は相対的に意図したものに近いはずです。もし画の形が許容できるとしたら、csvファイルの内容を手作業で修正して、「画の配置」を整えることで、最終的な「作品」に仕上げることができます。

ここで修正するのは、csvファイル「syodo.csv」の2~4列目です。これらの3列は、三次元空間における「筆」の位置(評価値)の座標成分の推移です(2列目=横の位置、3列目=縦の位置、4列目=奥行)。

このため、例えば2列目の数値を増やすと、「筆」の位置が仮想空間の右側に移動します。同様に3列目や4列目の数値を増やすと「筆」の位置が、仮想空間の下方もしくは奥側に移動します。

画を書いている間の観測値(プッシュ・スイッチ on)は、このcsvファイルの14列目の数値が「1」になっています。したがって、ある画を書いている間の観測値(14列目が「1」)に対して、その2列目(もしくは3、4列目)の数値に、一律に同じ数値を足したり引いたりすると、該当する「画」の配置を、仮想空間上で横方向(もしくは縦方向、奥行方向)に平行移動できます。なお、スケッチの構造上、この数値の足し引き(画の平行移動)は該当する画の書き始めの1つ前の観測から開始してください(*)。

(*)本ステップ冒頭の上段の画像は、「a b c」を、全3画の文字として書いた後、3画目の「c」の位置を少し下方に下げた修正を示しています。また下段の画像は、修正後のスプレッドシートです。スプレッドシートの修正は、14列目が「1」の行(「画」を書いている間の観測値)とその直前の行に限定してください

【作業手順】

  1. 修正対象のcsvファイル「syodo.csv」を、別の名前もしくは別の形式(例えば「xlsx」形式)で保存する
  2. この新たなファイルをExcelで開き、修正対象の2~4行目の数値を、右側の空白部分(例えば 22~24列目)に複写する(オリジナルの数値を残すため)
  3. 別の空白部分(例えば 18~20列目)に、「画」の位置を修正した系列を「画」毎につくる
  4. 修正した系列(上の例では 18~20列目)の値を、元の系列(2~4列目)の該当部分に上書き複写する
  5. この上書きされた3列(2~4列目)の値を、オリジナルのcsvファイル「syodo.csv」の同じ列に複写する
  6. syodo.csv」を上書き保存して閉じる
  7. syodo.csv」と同じフォルダにあるProcessingの描画スケッチ「calligraphy_3_final.pde」を実行する
  8. 修正した「画」の位置を確認する
  9. この「画」の位置が良ければ、次の「画」の位置の調整を行う


■解説(12)
上述の「作業手順」の1~5段目の操作は、トライ・アンド・エラーでの位置修正を想定しています。修正の本質(実体)は、本ステップの画像(下段)を見た方が分かりやすいと思います。