StandardなんでmsdnLibraryが無いと思ってたがついてた、VC++6は無かったらしい
続きを読む
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
途中経過
ポイント移動に使うデータベースの構築とワイヤフレーム表示まで出来た
Build関数部分ではポイントの移動だけなので、pntMoveで新しい座標入れればいいやなんて思っていたら、
pntMoveでエラーが返ってくる
返り値は2なので不正なレイヤーに対する操作をしたというエラー
addPointとか追加するのはエラーが起きない
続きを読む
↑のような点A、B、Cを線ACに沿って一直線にそろえるには
B’がAC上にある、Bから最も近い点
uはACの単位ベクトル(ACの長さを1にしたベクトル)
AB’の長さは、ABとuの内積と等しい
Aが原点になるようにBとCからAを引いておく
B(Bx−Ax, By−Ay, Bz−Az)
C(Cx−Ax, Cy−Ay, Cz−Az)
uを求める
len(ACの長さ) = √Cx × Cx + Cy × Cy + Cz × Cz
u(Cx ÷ len , Cy ÷ len , Cz ÷ len)
ABとuの内積を求める
d = Bx × ux + By × uy + Bz × uz
B’の座標を求める
B’(Cx × d + Ax , Cy × d + Ay , Cz × d + Az)
Cで書くと
bool hoge(const LWDVector S, const LWDVector E, LWDVector
out)
{
LWDVector B, C, u;
double len, d;
int i;
for(i=0; i<3; i++) B[i] = out[i] - S[i];
for(i=0; i<3; i++) C[i] = E[i] - S[i];
len = sqrt(C[0]*C[0] + C[1]*C[1] + C[2]*C[2]);
if( 0 == len ) return false;
if( 0.0 == len ) return false;
for(i=0; i<3; i++) u[i] = C[i] / len;
d = B[0]*u[0] + B[1]*u[1] + B[2]*B[2];
d = B[0]*u[0] + B[1]*u[1] + B[2]*u[2];
for(i=0; i<3; i++) out[i] = C[i] * d + S[i];
return true;
}
この広告は90日以上新しい記事の投稿がないブログに表示されております。