雛形を利用して、色々なグラフを描きます。
"MyApp.h" で、曲線の定義域を (0, 20) へ変更します。
#include <MyCurve.h>
#include "MyCurve2.h"
class MyApp : public MyMainWnd{
public:
// 曲線を描く
void wmPaint(HDC hdc){
// メモリデバイス
MyMemoryDC mdc(hdc, 600, 400);
MyDC g(mdc.hdc);
// 座標変換
g.Trans(50, 0, 0, -50, mdc.width / 2, mdc.height / 2);
MyCurveX mcX; // x軸
MyCurveY mcY; // y軸
MyCurve2 mc; // 曲線
// 座標軸--------------------------------------------------------
g.Pen.Color(0, 0, 255); // 青色のペン
// x軸
g.draw(mcX, -10, 10);
// y軸
g.draw(mcY, -10, 10);
// 曲線を描く
g.Pen.Color(0, 0, 0); // 黒色のペン
g.Pen.Size(2);
g.draw(mc, 0, 20);
//=================================================================
// スクリーン画面へコピー
mdc.BitBlt(10, 10);
}
};
極方程式は、r = f(Θ) で表される曲線です。 これを、
x = f(Θ)cosΘ y = f(Θ)sinΘ
として曲線を描きます。
r = aΘ ですから、x = aΘcosΘ, y = aΘsinΘ となります。
// 曲線 class MyCurve2 : public MyCurve{ public: double a; double fx(double t){ return a * t * cos(t); } double fy(double t){ return a * t * sin(t); } MyCurve2(){ a = 0.1; } };
a = 0.1 としました。
実行画面です。
r = sinaΘ で表される曲線を、正葉線といいます。
// 曲線 class MyCurve2 : public MyCurve{ public: double a; double fx(double t){ return sin(a * t) * cos(t); } double fy(double t){ return sin(a * t) * sin(t); } MyCurve2(){ a = 7; } };
実行画面です。
r = a + b cosΘ で表される曲線を、リマソンといいます。
// 曲線 class MyCurve2 : public MyCurve{ public: double a, b; double fx(double t){ return (a + b * cos(t)) * cos(t); } double fy(double t){ return (a + b * cos(t)) * sin(t); } MyCurve2(){ a = 1; b = 0.8; } };
実行画面です。
// 曲線 class MyCurve2 : public MyCurve{ public: double a; double fx(double t){ return (1 + 0.5 * sin(5 * t) + 0.3 * cos(a * t)) * cos(t); } double fy(double t){ return (1 + 0.5 * sin(5 * t) + 0.3 * cos(a * t)) * sin(t); } MyCurve2(){ a = 10; } };