図形を描く - Siv3D/Reference-JP GitHub Wiki
# 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);
}
}