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)); } }