0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

React Nativeで指の状態を32枚事前合成したら全滅した — 実行時レイヤーで画像が11枚になるまで

0
Posted at

両手の指を折って2進数を作る iOS アプリを組んだ。指は5本、それぞれ伸ばすか折るかの2状態しかない。だとすれば手の見た目は 2⁵ = 32通りで尽きる——そう考えて事前に全部書き出したのが、この記事の失敗の入口になる。

要点だけ置く。経緯の全体は本編に譲る。


要点

  • 左手32枚・右手32枚・輪郭2枚の 合計66枚(約1MB) を事前生成した。実行時は1枚差し替えるだけで済む、という読みだった。
  • 1本折ったときは破綻しなかった。5本折ると、指が立ったまま折れた断片が重なった。 このとき合計値は 1023、ビットも 1111111111 で正しい。数の側からは破綻がまったく見えない。
  • 原因は素材のほうだった。「人差し指の絵」に人差し指以外の手も描かれていた。元の絵が部品に分かれていないものは、合成でも分けられない。 1本のときに気づけなかったのは、親指の折れた絵がたまたま自分の伸びた位置を覆っていたから。
  • 全部捨てて 実行時に重ねる方式へ。手のひら1枚+指10枚=11枚。伸びた指を先に、折れた指を後に描くと、折った指が手前に来る。画像の読み込みが 64個消えた
  • 右手の画像は要らなかった。scaleX: -1 で左手を反転すれば成立する。
  • ただし 反転は重みまで反転させた。 右手の親指が512になっていても、AI側では「配列の順序が反転している」以上の意味を持たない。両手を広げて左から 512, 256 … 2, 1 と並ぶよう定義側を直すまで、右手は嘘の数を返し続けた。
  • タップ判定の中心は3回外した。決まったのは、発注側が指先に丸を置いた画像を渡してきて、その座標を読み取ったとき。「指紋が集約するところ」は座標ではないので、言葉では渡らなかった。
  • 小指だけ反応しない。判定幅を他の指と同じ割合(0.083)で揃えていたが、小指は細いので実寸が足りない。押す側の指先の太さは、どの指を押すときも同じ。 0.120 に広げて解決(約45%)。

▶ 壊れた合成画像、鏡像の実物、判定点を3回外した過程まで、本編にまとめました:

バイナリーハンズ 〜両手で1024かぞえるまで〜(kuroto-blog)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?