Excelで考えるなら、任意の文字(例だとb)の行位置を調べて、
その最大値を基準に、各列最大値との差分の空白を頭に入れてやるだけでいいじゃん
●★●
★●●
●●★
だと★の位置は2,1,3、最大値は3なので各列3との差分の空白を先頭に入れる

1列目は          3列目は
3-2=1で          3-3=0で
空白一つ          空白0
□     □□     □□●
●     ●□     ●□●
★     ★★     ★★★
●     ●●     ●●
         ●       ●
      2列目は
      3-1=2で
      空白二つ

空白を入れると言ってもそれは見た目の話で、セルの挿入をするより
値のみ動かして空白を入れた形に持っていた方が速いけどね。
中心を探すんじゃなくてオフセットを算出する方法だが何か不満でもあるかな?