C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

GraphisPathで元の座標を求める方法

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■100358 / inTopicNo.1)  GraphisPathで元の座標を求める方法
  
□投稿者/ 文 (1回)-(2022/07/18(Mon) 16:01:25)

分類:[.NET 全般] 

VB.NETを使って、
ある図形をスプライン補間したいと考えています。




Dim Pt(3) As Point
Pt(0) = New Point(0, 0)
Pt(1) = New Point(0, 1)
Pt(2) = New Point(1, 1)
Pt(3) = New Point(1, 0)


Dim GP As New GraphicsPath
GP.Reset()
GP.AddCurve(Pt, 0.5)
GP.Flatten()

Dim PathPoints2 = GP.PathPoints



のようにして、スプライン補間した座標系を取得することができます。

この後で、Pt(1)とPt(2)の間の30%の位置にある
ポイントの座標を取得したいと思います。

そのためには、Pt(1)のポイントがPathPoints2の配列の中で
どこに相当するかを調べる必要があります。

これはいちいちFor文を使って調べるしかないのでしょうか?

もし、Pt配列の全てのポイントが異なる座標であれば
これでうまくいくかも知れませんが、
同じ座標が複数含まれていると、for文の方法だと
別のポイントと間違ってしまうこともあり得ると思います。

この場合、どのようにすれば良いですか?

あるいはFlattenする際に、
元のポイント数が2倍とか三倍に増やすみたいな設定があれば
元のポイントがどこに移ったのか容易に調べられると思いますが
このようなことはできないのでしょうか?






引用返信 編集キー/
■100360 / inTopicNo.2)  Re[1]: GraphisPathで元の座標を求める方法
□投稿者/ HattariB (24回)-(2022/07/18(Mon) 21:32:16)
No100358 (文 さん) に返信
> 同じ座標が複数含まれていると、for文の方法だと
> 別のポイントと間違ってしまうこともあり得ると思います。
ご質問に質問で返しちゃって恐縮なんですが、
線の連続性ってのは配列の添え字順にて代替できると思うので、
例え同じ座標が連続していても、それはたまたま同じ座標だっただけの話であって、
始点をAとして、B,Cという点が線上に存在していて、終点Dがあった時、
仮にB,Cが同じ座標だったとしても、BはAとC上の点であるし、CはBとD上の点であるから、
間違える事は無いと思うんですけど、間違えるんですか?

引用返信 編集キー/
■100361 / inTopicNo.3)  Re[1]: GraphisPathで元の座標を求める方法
□投稿者/ radian (90回)-(2022/07/19(Tue) 11:49:03)
2022/07/19(Tue) 11:51:34 編集(投稿者)

No100358 (文 さん) に返信

> あるいはFlattenする際に、
> 元のポイント数が2倍とか三倍に増やすみたいな設定があれば
> 元のポイントがどこに移ったのか容易に調べられると思いますが
> このようなことはできないのでしょうか?

https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.drawing2d.graphicspath.addcurve?view=dotnet-plat-ext-6.0#system-drawing-drawing2d-graphicspath-addcurve

AddCurveでnumberOfSegmentsを指定すればインデックスを逆算出来そうな感が。
また、注釈にこのように書かれています。

> 注釈
> ユーザーは、必要に応じて元のポイントを保持する必要があります。 元の点は内部的に 3 次ベジエ制御点に変換されるため、元の点を返すメカニズムはありません。
引用返信 編集キー/
■100363 / inTopicNo.4)  Re[2]: GraphisPathで元の座標を求める方法
□投稿者/ HattariB (26回)-(2022/07/19(Tue) 19:17:17)
No100360 (HattariB さん) に返信
> ■No100358 (文 さん) に返信
> 間違える事は無いと思うんですけど、間違えるんですか?

興味本位で聞いてみたので、返答不要ですよ。無視してくだされ。
引用返信 編集キー/
■100364 / inTopicNo.5)  Re[2]: GraphisPathで元の座標を求める方法
□投稿者/ 文 (2回)-(2022/07/20(Wed) 10:34:56)
メカニズムはないのですね
どうもありがとうございます。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ