Skip to content

図形を描く

Reputeless edited this page Mar 14, 2017 · 4 revisions

円を描く

# include <Siv3D.hpp>

void Main()
{
	while (System::Update())
	{
		// 中心 (300, 200) 半径 150 の円を描く
		Circle(300, 200, 150).draw();
	}
}

長方形を描く

# include <Siv3D.hpp>

void Main()
{
	while (System::Update())
	{
		// 座標 (50, 100) から 幅 400, 高さ 200 の長方形を描く
		Rect(50, 100, 400, 200).draw();
	}
}

線を描く

# include <Siv3D.hpp>

void Main()
{
	while (System::Update())
	{
		// 始点 (50, 400) 終点 (600, 50) の線分を描く
		Line(50, 400, 600, 50).draw();

		// 始点 (50, 200) 終点 (600, 250) 太さ 5 の線分を描く
		Line(50, 200, 600, 250).draw(5);
	}
}

三角形を描く

三角形の頂点は 時計回り に指定します。

# include <Siv3D.hpp>

void Main()
{
	while (System::Update())
	{
		// 3 点 (50, 50), (600, 400), (100, 400) を頂点とする三角形を描く
		Triangle(Vec2(50, 50), Vec2(600, 400), Vec2(100, 400)).draw();
	}
}

Vec2(x, y){ x, y } とも書けます。

# include <Siv3D.hpp>

void Main()
{
	while (System::Update())
	{
		// 3 点 (50, 50), (600, 400), (100, 400) を頂点とする三角形を描く
		Triangle({ 50, 50 }, { 600, 400 }, { 100, 400 }).draw();
	}
}

四角形を描く

四角形の頂点は 時計回り に指定します。
180° 以上の凹の角を含む場合は Polygon を使ってください。

# include <Siv3D.hpp>

void Main()
{
	while (System::Update())
	{
		// 4 点 (200, 50), (400, 50), (600, 400), (0, 400) を頂点とする四角形を描く
		Quad({ 200, 50 }, { 400, 50 }, { 600, 400 }, { 0, 400 }).draw();
	}
}

角丸長方形を描く

# include <Siv3D.hpp>

void Main()
{
	while (System::Update())
	{
		// 座標 (50, 100) から 幅 400, 高さ 200, 角の半径 40 の角丸長方形を描く
		RoundRect(50, 100, 400, 200, 40).draw();
	}
}

多角形を描く

多角形の頂点は 時計回り に指定します。

# include <Siv3D.hpp>

void Main()
{
	// 多角形を作成
	const Polygon star
	{
		{ 0, -200 },{ 40, -60 },
		{ 180, -60 },{ 75, 25 },
		{ 115, 160 },{ 0, 80 },
		{ -115, 160 },{ -75, 25 },
		{ -180, -60 },{ -40, -60 }
	};

	while (System::Update())
	{
		// 多角形を本来の位置に描く
		star.draw();

		// 多角形を (400, 300) 移動させた位置に描く
		star.draw(400, 300);
	}
}

色のついた図形を描く

Palette::色名, Color(r,g,b), Color(r,g,b,a) などで色を指定します。

# include <Siv3D.hpp>

void Main()
{
	while (System::Update())
	{
		// 赤い円を描く
		Circle(100, 100, 100).draw(Palette::Red);

		// オレンジの長方形を描く
		Rect(150, 100, 200, 200).draw(Palette::Orange);

		// RGB(128, 255, 255) 太さ 3 の線分を描く
		Line(50, 400, 600, 50).draw(3, Color(128, 255, 255));

		// RGB(0, 0, 255) 不透明度 127 の円を描く
		Circle(400, 400, 200).draw(Color(0, 0, 255, 127));
	}
}

Color(r,g,b)Color(r,g,b,a){ } で表現することもできます。

# include <Siv3D.hpp>

void Main()
{
	while (System::Update())
	{
		// 赤い円を描く
		Circle(100, 100, 100).draw(Palette::Red);

		// オレンジの長方形を描く
		Rect(150, 100, 200, 200).draw(Palette::Orange);

		// RGB(128, 255, 255) 太さ 3 の線分を描く
		Line(50, 400, 600, 50).draw(3, { 128, 255, 255 });

		// RGB(0, 0, 255) 不透明度 127 の円を描く
		Circle(400, 400, 200).draw({ 0, 0, 255, 127 });
	}
}

長方形の枠を描く

# include <Siv3D.hpp>

void Main()
{
	const Rect rect(100, 100, 400, 300);

	while (System::Update())
	{
		// 長方形の内側に太さ 5 の赤い枠を描く
		rect.drawFrame(5, 0, Palette::Red);

		// 長方形の外側に太さ 20 の緑の枠を描く
		rect.drawFrame(0, 20, Palette::Green);
	}
}

円の枠を描く

# include <Siv3D.hpp>

void Main()
{
	const Circle circle(350, 250, 200);

	while (System::Update())
	{
		// 円の内側に太さ 5 の白い枠を描く
		circle.drawFrame(5, 0);

		// 円の外側に太さ 20 の茶色い枠を描く
		circle.drawFrame(0, 20, Palette::Brown);
	}
}

回転した長方形を描く

時計回りの回転角度を ラジアン角 で指定します。

# include <Siv3D.hpp>

void Main()
{
	// 回転角度 (45°)
	const double degree = 45;

	// ラジアン角に変換
	const double radian = Radians(degree);

	// 長方形
	const Rect rect(150, 200, 400, 100);

	while (System::Update())
	{
		rect.draw();

		// 回転した長方形をオレンジ色で描く
		rect.rotated(radian).draw(Palette::Orange);
	}
}

度数法のリテラル _deg を使うこともできます。

# include <Siv3D.hpp>

void Main()
{
	// 長方形
	const Rect rect(150, 200, 400, 100);

	while (System::Update())
	{
		rect.draw();

		// 45° 回転した長方形をオレンジ色で描く
		rect.rotated(45_deg).draw(Palette::Orange);
	}
}

複数の点をつないだ線を描く

# include <Siv3D.hpp>

void Main()
{
	// 線を作成
	const LineString line
	{
		{ 50, 100 },{ 600, 100 },
		{ 50, 200 },{ 600, 200 },
		{ 50, 300 },{ 600, 300 },
		{ 50, 400 }
	};

	while (System::Update())
	{
		// 黄色い線を太さ 3 で描く
		line.draw(3, Palette::Yellow);
	}
}

矢印を描く

# include <Siv3D.hpp>

void Main()
{
	while (System::Update())
	{
		// 始点 (50, 200) 終点 (200, 250) の矢印を描く
		Line(50, 200, 200, 250).drawArrow();

		// 線の幅 5, 三角の幅 20, 高さ 50 の矢印を描く
		Line(250, 350, 500, 100).drawArrow(5, { 20, 50 }, Palette::Yellow);
	}
}

スプライン曲線を描く

すべての制御点を通過する滑らかな曲線を描きます。引数 isClosedCurve を true にすると 1 周する閉曲線になります。

# include <Siv3D.hpp>

void Main()
{
	const LineString line
	{
		{ 50, 50 },{ 200, 200 },
		{ 400, 200 },{ 100, 400 },
		{ 500, 400 }
	};

	while (System::Update())
	{
		// 線の幅 8 のスプライン曲線を描く
		line.drawCatmullRomSpline(8.0);
	}
}

ベジェ曲線を描く

# include <Siv3D.hpp>

void Main()
{
	QuadraticBezier quadraticBezier({ 100, 400 }, { 100, 250 }, { 300, 100 });

	CubicBezier cubicBezier({ 300, 400 }, { 400, 400 },
		{ 400, 100 }, { 500, 100 });

	while (System::Update())
	{
		// 線の幅 4 の 2 次ベジェ曲線を描く
		quadraticBezier.draw(4.0);

		// 線の幅 2 の 3 次ベジェ曲線をオレンジ色で描く
		cubicBezier.draw(2.0, Palette::Orange);
	}
}

← 前の章へ戻る | - 目次 - | 次の章へ進む →

Siv3D について

  1. Siv3D の基本
  2. 図形を描く
  3. テクスチャを描く
  4. テキストを描く
  5. 文字列と数値の変換
  6. キーボード入力
  7. マウス入力
  8. サウンドの再生
  9. MIDI の再生
  10. ウィンドウと背景
  11. 図形のあたり判定
  12. 乱数
  13. ダイアログ
  14. ドラッグ & ドロップ
  15. アプリの状態
  16. テキストファイル
  17. INI, CSV, JSON
  18. バイナリファイル
  19. GUI
  20. アセット管理
  21. 画像編集
  22. Web カメラ
  23. マイク入力
  24. 経過時間の測定
  25. HSV カラー
  26. ファイルダウンロード
  27. 3D 描画
  28. 2D のレンダーステート
  29. 3D のレンダーステート
  30. パーティクル
  31. スクリーンショット
  32. アプリケーションの公開
  33. さらに学ぶには

表現テクニック集

入出力デバイス

開発のヒント

Clone this wiki locally