2016-05-08 27 views
1

円上の点の集合を得るための簡単な解法を探しています。
私のプログラムはc#、wpf、telerikで動作します。中心点、開始点、および終了点を指定した円弧上の点を取得します。

私のプログラムでは、カメラのFOV(視野)を持つ地図があります。
今まで私は三角形のfovを持っていましたが、クライアントは円弧でそれを望んでいます。
私は、左右のFOV境界を表す2つの点を持つ中心点(カメラの原点)を持っています。
ポイントは座標で表されます。

A draw of what I wish to accomplish

私の目標は、私が描くのにtelerikに送りますFOV制限(左と右のポイント)を、接続している円弧の上の点の集合を収集することです。

いくつかの発言:

  1. 私はtelerikが弧を描くことができます知っているが、それは私が、円の方程式を計算し、そこから継続すると言って(本当に便利ではない)いくつかの答えを見た奇妙なbinding problems
  2. を持っています。可能であれば、私はそれを避けたい。

C#とMathクラスにはいくつか役立つツールがありますか? 私はそれを自分で計算しようとしましたが、処理が複雑すぎます。

ありがとう、 Naor。

答えて

1

Pathコントロールを使用して、適切なPathGeometryArcSegmentを含めることができます。

以下の例では、(100,100)が中心点で、(50,50)(150,50)が円弧の始点と終点です。弧は楕円のセグメントであり、ArcSegmentのSizeプロパティは楕円の半径を指定します。ここでは、半径が50*sqrt(2)の円です。

<Path Stroke="Black"> 
    <Path.Data> 
     <PathGeometry> 
      <PathFigure StartPoint="100,100" IsClosed="True"> 
       <LineSegment Point="50,50"/> 
       <ArcSegment Point="150,50" Size="70.7,70.7" SweepDirection="Clockwise"/> 
      </PathFigure> 
     </PathGeometry> 
    </Path.Data> 
</Path> 

か短い:

あなたのビューモデルは、あなたがこのようなバインディングとXAMLを書くことができ

public Point Center { get; private set; } = new Point(100, 100); 
public Point Start { get; private set; } = new Point(50, 50); 
public Point End { get; private set; } = new Point(150, 50); 
public Size Size { get; private set; } = new Size(70.7, 70.7); 

のようなアークフィギュアを記述する4つのプロパティを持っていると仮定すると

<Path Stroke="Black" Data="M100,100 L50,50 A70.7,70.7 0 0 1 150,50Z" /> 

<PathFigure StartPoint="{Binding Center}" IsClosed="True"> 
    <LineSegment Point="{Binding Start}"/> 
    <ArcSegment Point="{Binding End}" Size="{Binding Size}" SweepDirection="Clockwise"/> 
</PathFigure> 

もちろん、そのようなジオメトリをコードの背後に作成することもできます。

+0

返信いただきありがとうございます。前にも触れましたが、奇妙なバインディングの問題があります。私はそれにポイント値をバインドする必要があり、それは不可能です(最初の発言のリンク)。プロジェクトのレイアウトのため、コードビハインドオプションも良くありません。私はこの数学の計算を避けることができたらいいのに、それは私の状況にとっては最も簡単な結果だ。 – nafarkash

+0

私はTelerikコンポーネントについては何も話していません。ArcSegmentはWPFの一部であり、上記のXAMLのすべてのプロパティはもちろんバインド可能です。編集された答えを参照してください。 – Clemens

+0

それはtelerik層の上で動作するはずですか?これは大規模なプロジェクトであり、これまでのところ実装を変更することはできません。さらに、私はDataTemplateを介してそれを使用しようとしました。違いはありますか?それを動作させるために他のオブジェクトを使用する必要がありますか? – nafarkash

関連する問題