空間

空間用の、点クラスを作ります。

MyPoint3D クラス

#ifndef	___MYPOINT3D
#define	___MYPOINT3D

//
//	空間座標
//

#include	<math.h>
#include	<MyMath.h>
#include	<MyPoint.h>

class MyPoint3D : public MyPoint{
public:
	double x3, y3, z3;
	
	// コンストラクタ
	MyPoint3D(){
		x3 = y3 = z3 =0;
	}

	// 座標を代入する
	void set(double x1, double y1, double z1){
		int xx = 35;	// x軸からの角度
		int yy = 30;	// xy平面からの角度
		
		x3 = x1;
		y3 = y1;
		z3 = z1;
		
		x = -x3 * sin(DegreeToRadian(xx)) + y3 * cos(DegreeToRadian(xx));
		y = -x3 * cos(DegreeToRadian(xx)) * sin(DegreeToRadian(yy))
			- y3 * sin(DegreeToRadian(xx)) * sin(DegreeToRadian(yy))
				+ z3 * cos(DegreeToRadian(yy));		
		
	}
};


#endif

使用例(win511)

座標軸を描いてみます。

//
//	MyApp.h
//

#include	<MyPoint3D.h>
#include	<MyDC.h>

class MyApp : public MyMainWnd{
public:
	// WM_PAINT
	void wmPaint(HDC hdc){
		
		RECT rc;
		MyPoint3D p0, p;
		
		GetClientRect(hWnd, &rc);
		
		myTrans.set(50, 0, 0, -50, rc.right / 2, rc.bottom / 2);
		
		// 座標軸を描く----------------------------
		p0.set(0, 0, 0);	// 原点
		
		// x軸
		MoveToEx(hdc, p0.px(), p0.py(), NULL);
		p.set(3, 0, 0),
		LineTo(hdc, p.px(), p.py());
		// y軸		
		MoveToEx(hdc, p0.px(), p0.py(), NULL);
		p.set(0, 3, 0),
		LineTo(hdc, p.px(), p.py());
		// z軸
		MoveToEx(hdc, p0.px(), p0.py(), NULL);
		p.set(0, 0, 3),
		LineTo(hdc, p.px(), p.py());
	}
};

実行画面です。


[戻る]