Siv3D February 2013 の新機能(2/2)

Siv3D February 2013 で追加された機能の紹介、後編です。

線分の最近接点


Line::closest(Vec2) はある点に最も近い Line 上の点を返します。
中央の白い線分とマウスカーソルを結ぶ最も短い線分を黄色で描画してみます。

# include <Siv3D.hpp>

void Main()
{
	const Line line(100,100,550,250);

	while(System::Update())
	{
		const Vec2 mousePos = Mouse::Pos();

		const Vec2 closestPoint = line.closest(mousePos);

		Circle(mousePos,15).draw(Palette::Lightblue);

		line.draw(Palette::White,5);

		LineF(mousePos,closestPoint).draw(Palette::Yellow,2);
	}
}

図形の面積

Triangle, Rect, Quad, Circle, Polygon などの図形の面積(ピクセル)を計算します。
※記事を書いていたら Quad と Polygon の面積の符号が反転しているバグを見つけました。次回のアップデートで修正するのでとりあえずは Abs() を使いましょう。

# include <Siv3D.hpp>

void Main()
{
	const Vec2 pts[]=
	{
		Vec2(330,50),Vec2(370,190),
		Vec2(510,190),Vec2(405,275),
		Vec2(445,410),Vec2(330,330),
		Vec2(215,410),Vec2(255,275),
		Vec2(150,190),Vec2(290,190)
	};

	const Polygon polygon(pts);

	const double area = Abs(polygon.area());

	const Font font(30);

	while(System::Update())
	{
		polygon.draw(Palette::Yellow);

		font.draw(Format()+L"面積: "+area+L" ピクセル");
	}
}

型と範囲を指定した乱数関数

RNG と Distribution を作ることなく、型と範囲を指定した乱数を生成できるようになりました。Random<Type>(min,max) で、Type 型の [min,max] に一様分布する乱数を取得できます。

# include <Siv3D.hpp>

void Main()
{
	for(int i=0; i<10; ++i)
	{
		Logger::Write(Random<int>(1,6));
	}

	for(int i=0; i<10; ++i)
	{
		Logger::Write(Random<wchar_t>(L'A',L'Z'));
	}

	for(int i=0; i<10; ++i)
	{
		Logger::Write(Random<double>(0.0,10.0));
	}
}