Wtransf compute_xf(CWpt_list& p) { Wpt c = p.average(); double s = p.spread(); ARRAY<Wvec> v(p.num()); for (int i=0; i<p.num(); i++) { v += (p[i] - c)/s; } assert(v.num() == p.num()); return Wtransf::translation(c) * compute_xf(v) * Wtransf::translation(-c); }
Wtransf compute_xf(CWpt_list& p) { Wpt c = p.average(); double s = p.spread(); vector<Wvec> v(p.size()); for (Wpt_list::size_type i=0; i<p.size(); i++) { v[i] = (p[i] - c)/s; } assert(v.size() == p.size()); return Wtransf::translation(c) * compute_xf(v) * Wtransf::translation(-c); }
int main(int argc, char *argv[]) { if (argc != 1) { cerr << "Usage: " << argv[0] << " < input.sm > output.sm" << endl; return 1; } BMESHptr mesh = BMESH::read_jot_stream(cin); if (!mesh || mesh->empty()) return 1; // didn't work Wtransf xf = compute_xf(mesh->verts().pts()); MOD::tick(); mesh->transform(xf, MOD()); mesh->write_stream(cout); return 0; }