ロゴ メインコンテンツへ
RSSフィード
「デジタルコンテンツ制作」に関連する記事一覧

MEL 最小二乗法を用いた頂点群の1次関数直線への整列

2011/05/13
(2018/11/11 最終更新)
(この記事の文字数: 335)

最小二乗法を用いて頂点群を最も近い直線に近似して整列させるMELスクリプトです。スナップなどではある軸に平行にするような整列はできますが、任意の1次関数直線には整列できないので、斜めなどの頂点群をもっともらしい直線に沿って整列したいときに有効です。

I made a MEL script to align verteces along with the slanting straight line by least squares method. This script makes sence when you ailgn slanting vertices.


global proc alignLinear(int $axis1, int $axis2){
  string $sels[] = `ls -sl`;
  string $targets[] = `filterExpand -sm 31 $sels`;
  float $n = size($targets);
  float $a, $b;
  float $y, $pos[];
  float $sum_x, $sum_y, $sum_xy, $sum_xx;

  $sum_x = $sum_y = $sum_xy = $sum_xx = 0.0;
  for($target in $targets){
    $pos = `xform -q -ws -t $target`;
    $sum_x += $pos[$axis1];
    $sum_y += $pos[$axis2];
    $sum_xy += $pos[$axis1]*$pos[$axis2];
    $sum_xx += $pos[$axis1]*$pos[$axis1];
  }

  $a=($n*$sum_xy-$sum_x*$sum_y)
      /($n*$sum_xx - $sum_x*$sum_x);
  $b=($sum_xx*$sum_y-$sum_xy*$sum_x)
      /($n*$sum_xx - $sum_x*$sum_x);

  for($target in $targets){
    $pos = `xform -q -ws -t $target`;
    $pos[$axis2] = $a*$pos[$axis1] + $b;
    xform -ws -t $pos[0] $pos[1] $pos[2] $target;
  }
}

Example

alignLinear(0, 1);
alignLinear(0, 2);

最小二乗法についてはこちらのサイトがわかりやすかったです。
http://szksrv.isc.chubu.ac.jp/lms/lms1.html


  このエントリーをはてなブックマークに追加  

<<「デジタルコンテンツ制作」の記事一覧に戻る

<<「デジタルコンテンツ制作」の次の記事
「デジタルコンテンツ制作」の前の記事 >>

コメント(0 件)



コンテンツロード: 0.0068 sec
Copyright(C)2006-2024 puarts All Rights Reserved