問題タブ [geometry-class-library]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
378 参照

c# - 親リストの型のサブタイプである型を持つ子を受け入れないジェネリック型付き親のリスト

これが私の現在のクラス図です:

ここに画像の説明を入力

ご覧のとおり、 と はどちらもとPolygonNonPolygon型です。ジェネリックなので、 for のいずれかのリストを作成して、orを持つことができるようにするか、 forのみにすることができます。以下は、実装方法を示すクラスのサンプルです。PlaneRegionLineSegmentIEdgePlaneRegionPlaneBoundariesIEdgeNonPolygonLineSegmentarcLineSegmentPolygon

これはすべて正常に機能しますが、リストを作成しようとすると、および実装しているにもかかわらず、リストにオブジェクトをPlaneRegion<IEdge>追加できません。これは、コンパイル時にエラーが発生するコードの例です。PolygonPolygonPlaneRegion<LineSegment>LineSegmentIEdge

polygon1タイプセーフなこのリストに追加する方法はありますか? polygon1型にキャストしようとPlaneRegion<IEdge>しましたが、型を変換できないというコンパイル エラーが発生しました。できることはわかっています(PlaneRegion<IEdge>)(object)が、ずさんで安全ではないように見えるので、もっと良い方法があるはずです。

0 投票する
1 に答える
171 参照

c# - 精度の問題を修正する方法

単位を扱うための同じ基本概念に従ういくつかのクラスがあります。

単体テストで使用される簡単な例を次に示します。

他の基本的な単位の種類をカバーする、このデモの角度クラスのようないくつかのクラスを作成しました。

精度の問題があることが明らかになった特定のクラスは、長さの単位を処理するクラスの使用でした。Dimension

私は、この Dimension クラスを基本ユニット タイプとして利用する基本的なジオメトリ ライブラリの構築を支援しました。たとえば、Point クラスは次のとおりです。

線やその他の形状には、このポイント クラスを使用して構築されたディメンションと端点によって表される長さなどのプロパティがあります。

これらの線がすべて平行かどうかを確認しようとすると、問題が明らかになります。この関数のように:

高すぎる精度をチェックしているため、false が返されることがよくあります。ポイントとラインで回転と平行移動を行った後、true を返したいときに、この関数が false を返すようにするのに十分なだけ丸めが加算されます。

そう:

次の選択肢のうち、正しい/より良い選択肢はどれですか?

  • IsParallelTo数値が比較的近い (例: 0.0001 インチ以内)などの関数でチェックを行うだけです。

If(Math.Abs​​(thing.x - thing2.x) < .0001)

  • 構成ファイルから引き出された可変定数を使用して以前のアイデアを改善し、ユーザーが希望する許容偏差を選択できるようにします。

If(Math.Abs​​(thing.x - thing2.x) < Properties.AcceptedDeviationConstant)

  • またはディメンション クラスのルート レベルで問題を軽減します。

同じ戦略を使用できます

実際にはこのようになりますが、上記の方が理解しやすいです

return (Math.Abs​​(this.GetValue(this.InternalUnitType) - ((Dimension)(obj)).GetValue(this.InternalUnitType))) < Constants.AcceptedEqualityDeviationConstant;

または最後に、私の最後のアイデアは、単位クラスのすべてを (寸法、角度など) のDecimal代わりに基本単位に置き換えDouble、どういうわけか (それを調べた後) それが役立つかどうかを判断することです。


クラスの等価演算の精度の一貫性を向上させる方法と場所は?

ps ライブラリはオープンソースであり、見つけることができます (Units hereおよび Geometry here )

0 投票する
1 に答える
623 参照

c# - Visual Studio Package の呼び出し機能

ロード時に次のようなツール ウィンドウを作成する新しい Visual Studio パッケージを作成しました。

ここに画像の説明を入力

これは、2 次元または 3 次元で形状を描画するキャンバスなどのいくつかのコントロールで構成されています。現在、これらは初期化ステップで機能して、上記のオブジェクトを作成しています。このツールを便利にするために、これらのコントロールでメソッドを呼び出して、描画する他のオブジェクトを渡したいと思います。たとえば、ポイントとラインを含むコードをデバッグしていて、それらをグラフィカルに表示したいと考えています。(おそらくイミディエイト ウィンドウを使用していますか?または同様のものを使用していますか?) GeometryVisualToolWindow.DrawObject(myCircle); を呼び出せるようにしたいと思います。

パッケージ内のパブリック メソッドにアクセスして引数を渡すにはどうすればよいですか?

デバッガー ビジュアライザーは 1 つのオブジェクトのみを表示するシーンからオブジェクトを選択的に追加および削除できるようにしたいので、デバッガー ビジュアライザーは使用したくありません。(例: 2 つの線が交差しているかどうかを確認したいなど)


アップデート

DTE.Debugger.GetExpression問題を解決するために使用しようとしましたが、適切な参照を追加した後、次のようになります。

ここに画像の説明を入力

0 投票する
0 に答える
518 参照

coordinate-systems - 球座標よりもオイラー角を使用する利点は何ですか?

相対座標系がオイラー角と平行移動のリストとして保存されるアプリケーションを使用しています。

球面座標上のオイラー角を使用して回転を表す正当な理由はありますか?

https://en.wikipedia.org/wiki/Euler_angles

http://en.wikipedia.org/wiki/Spherical_coordinate_system

0 投票する
1 に答える
228 参照

computational-geometry - 2 つの多角形の共通の内点を見つける

ポリゴンが重なっているとします。どちらも必ずしも凸ではありません。どちらの境界上でもなく、両方の内側にあるポイントを見つける効率的なアルゴリズムは何ですか?

それらが重なり合い、ポリゴンが 3D の頂点のセットによって定義されていると仮定します。

0 投票する
2 に答える
1190 参照

c# - いつモック対スタブを使用するか、またはどちらも使用しないか?

私はモックとスタブ、それらの違いと用途について読んでいます。私はまだ少し混乱していますが、私はそれの要点を持っていると思います.

今、私はアプリケーションについて疑問に思っています。実際のオブジェクトが複雑すぎて 1 つの側面をテストするには移動できないようなテスト シナリオで、「偽の」オブジェクトを作成する際に使用されることがわかります。

しかし、私のアプリケーションを考えてみましょう: 私は計算幾何学ライブラリに取り組んでいます。私たちのライブラリは、点、線、線分、ベクトル、多角形、多面体、およびその他のオブジェクトの束とすべての通常の幾何学的操作を定義します。特定のオブジェクトは、ポイントまたは方向のリスト、または下位レベルのオブジェクトとして保存されます。しかし、これらのオブジェクトの生成に数ミリ秒以上かかるものはありません。

このライブラリをテストしているとき、どこでもモック/スタブを使用するのは理にかなっていますか?

現在、特定のテストケースのみを使用しています。私たちはそれらをスタブと呼んでいますが、スタブの技術的な定義を満たしていないと思います。そのためのより良い語彙は何だと思いますか? 「テストケース」?「例」?

ソースコード: https://bitbucket.org/Clearspan/geometry-class-library/src

編集: すべてのジオメトリ オブジェクトで不変性を目指していることに注意してください。そのため、操作の結果をテストするだけで意味があり、初期オブジェクトへの状態の変更は意味がありません。

0 投票する
3 に答える
1738 参照

computational-geometry - エッジのセットからの最も外側のポリゴン

ここに画像の説明を入力すべて接続されている 2 次元の線分のセットがあるとします。セット内の最も外側のセグメントを見つけるアルゴリズムが必要です。つまり、同じ領域を区切る最小のサブセットです。

注: これは、セグメントを構成する点の凸包を見つけることと同じではありません。

編集: 一番上にセグメントの初期セットがあります。その下には、内側のセグメントが削除された同じアウトラインがあります。(小さな灰色の十字は無視してください。交点を示すためのものです。)