LineStringで定義したlineを分けたい
dotto  2018/12/06(Thu) 14:58
LineStringで定義したLineのn点目で分割して表示したいのですが、

LineString line({
Vec2(100,100) , Vec2(500,500) , Vec2(1000,700)
});

と定義して

Line(Vec2(100, 100), Vec2(500, 500)).draw(10, Palette::Black);
Line(Vec2(500, 500), Vec2(1000, 700)).draw(10, Palette::Black);

と同じ出力を得たいです。
どのようにすればいいのでしょうか
記事編集
Reputeless  2018/12/11(Tue) 11:17
Siv3D Augusat 2016 v2 / OpenSiv3D v0.3.1 ともに以下のように書けます。

# include <Siv3D.hpp>

void Main()
{
const LineString lines{ Vec2(100, 100) , Vec2(400, 400) , Vec2(600, 200)};

while (System::Update())
{
lines.line(0).draw(10, Palette::Yellow);

lines.line(1).draw(10, Palette::Red);
}
}
編集
dotto  2018/12/11(Tue) 13:01
返信有難うございます。
これは、スプライン曲線には使えないみたいですが、
複数点ある中の

n点からm点までを曲線に、
m点からo点までを曲線にする
のように分けることは叶わないのでしょうか?
編集
Reputeless  2018/12/11(Tue) 20:31
こうでしょうか

# include <Siv3D.hpp>

void Main()
{
const LineString lines{
Vec2(100, 100), Vec2(200, 100),
Vec2(100, 200), Vec2(200, 200),
Vec2(100, 300), Vec2(200, 300),
Vec2(100, 400), Vec2(200, 400)};

while (System::Update())
{
LineString(lines.begin(), lines.begin() + 4).drawCatmullRom(10, Palette::Yellow);

LineString(lines.begin() + 3, lines.begin() + 6).drawCatmullRom(10, Palette::Red);
}
}

ちなみに LineString::catmullRom() が返す Catmull-Romスプライン曲線も LineString です。
編集
dotto  2018/12/13(Thu) 11:03
ありがとうございます。
これでやりたいことができそうです。
編集
件名
Re: LineStringで定義したlineを分けたい
名前
コメント
画像添付


投稿修正キー (投稿を修正する時に使います)
画像認証 (右画像の数字を入力) 投稿キー

- WEB PATIO -