问题标签 [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.
c# - 几何对象的可视化调试器
在处理表示几何对象的库时,调试当前如下所示:
在这里,我正在查看 、 和 windows 中的Autos
局部变量。Locals
Watch
Immediate
由于我无法在脑海中想象对象的形状,因此我更喜欢图形组件来表示这些对象。所以我开始创建一个 Debugger Visualizer 来绘制对象。我在此处的 bitbucket 上的公共回购中有它。
现在我无法让它在解决方案中的控制台应用程序之外工作。我究竟做错了什么?
这是它工作时的样子:
另外,我怎样才能以允许我一次查看多个对象的方式执行此操作。我意识到我真的很想看到多个对象及其交互,而不仅仅是单个对象。(例如寻找交叉路口等)。
附言
有没有人在任何地方看到过这样的调试器扩展?或者对如何修复当前的问题有任何建议?
我以 Visual Studio Extension 的形式尝试过,但也没有成功。有关详细信息,请参阅此问题。
c# - 不接受类型是父列表类型的子类型的子类型的通用类型父列表
这是我当前的类图:
如您所见,Polygon
和NonPolygon
都是PlaneRegion
和LineSegment
实现的类型IEdge
。这PlaneRegion
是通用的,所以我们可以列出它的一个列表,PlaneBoundaries
以便IEdge
它NonPolygon
可以具有LineSegment
或arc
,或者它们只能LineSegment
用于Polygon
。下面是类的示例,以显示它是如何实现的:
这一切都很好,但是当我尝试制作它的列表时,尽管是 a和implemting ,但我PlaneRegion<IEdge>
不会将对象添加到列表中。这是给我一个编译时错误的代码示例:Polygon
Polygon
PlaneRegion<LineSegment>
LineSegment
IEdge
有没有办法添加polygon1
到这个类型安全的列表中?我尝试强制转换polygon1
为类型PlaneRegion<IEdge>
,但这给出了一个无法转换类型的编译错误。我知道我可以做到(PlaneRegion<IEdge>)(object)
,但它似乎草率且不安全,因此似乎应该有更好的方法。
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
(维度、角度等)替换为十进制,并以某种方式(在研究之后)弄清楚这是否会有所帮助。
我应该如何以及在哪里提高班级平等运算的精度一致性?
c# - Visual Studio Package的调用函数
我创建了一个新的 Visual Studio 包,它在加载时会创建一个如下所示的工具窗口:
它由一些带有画布的控件组成,可以在 2 或 3 维中绘制形状。现在,它们在初始化步骤中工作以创建您在上面看到的对象。为了使这个工具有用,我想在这些控件上调用一个方法来传递其他对象进行绘制。例如,我正在调试一些带有点和线的代码,并希望以图形方式查看它们。(也许使用即时窗口?或类似的东西?)我希望能够调用 GeometryVisualToolWindow.DrawObject(myCircle);
如何访问包中的公共方法并传递参数?
我不想使用调试器可视化器,因为我希望能够有选择地从场景中添加和删除对象,其中调试器可视化器只会显示单个对象。(例如我想看看两条线是否相交等)
更新
我试图用它DTE.Debugger.GetExpression
来解决这个问题,但是在添加了适当的引用之后,我得到了这个:
c# - 如何组合多面体?
假设我有 2 个多面体,在空间上部分重叠。每个都由连接的多边形列表定义,而多边形列表又由线段列表定义(由 2 个点定义)。是否有一个简单的算法来创建多面体,它是这些多面体边界的并集,但会删除所有内部部分?
同样,在此之后,我将实现减法和交集方法。
我正在为这个开源库做出贡献。源代码: https ://bitbucket.org/Clearspan/geometry-class-library/src/34a2ab5031879d051abb855a828368e397b4f5b6/GeometryClassLibrary/Solids/Polyhedron.cs?at=master
coordinate-systems - 与球坐标相比,使用欧拉角有什么优势?
computational-geometry - 找到两个多边形的共同内点
假设我有重叠的多边形。两者都不一定是凸的。什么是找到它们内部而不是边界上的点的有效算法?
假设它们重叠,并且我们的多边形由它们的 3D 顶点集定义。
computational-geometry - 围绕多面体的最小矩形框
我正在寻找一种算法来找到包围多面体的最小盒子。
我的想法如下:找到最大的边,然后移动实体,使边与x轴对齐。找到与该边相交的下一个最大边,并将其尽可能靠近 z 轴对齐,同时将另一边留在 x 上。然后,计算 x、y 和 z 的最大差异。使用这些尺寸创建周围的形状,然后将框移回对象的原始位置。
有没有更有效的策略呢?我的想法是否忽略了一些极端情况?
编辑:现在假设要绑定的对象是凸的。不过,一般情况下的答案也将受到欢迎。
c# - 何时使用 Mock v. Stub,或两者都不使用?
我一直在阅读 Mocks 和 Stubs,它们的区别和用途。我仍然有点困惑,但我想我已经掌握了它的要点。
现在我想知道应用程序。我可以看到在测试场景中创建“假”对象的用途,在这些场景中,实际对象太复杂而无法测试某个方面。
但是让我们考虑一下我的应用程序:我正在研究一个计算几何库。我们的库定义了点、线、线段、向量、多边形和多面体,以及一堆其他对象和所有常见的几何操作。任何给定的对象都存储为点或方向的列表,或较低级别的对象。但是这些对象的生成时间都不超过几毫秒。
当我测试这个库时,在任何地方使用 Mocks/Stubs 有意义吗?
现在我们只使用特定的测试用例。我们称它们为存根,但我认为它们不符合存根的技术定义。你认为更好的词汇是什么?“测试用例”?“例子”?
源代码:https ://bitbucket.org/Clearspan/geometry-class-library/src
编辑:请注意,我们正在努力在所有几何对象中实现不变性,因此仅测试操作结果才有意义,而不是初始对象的状态更改。
computational-geometry - 一组边的最外层多边形
假设我有一组全部连接的二维线段。我需要一种算法来找到集合中最外层的段。即,限定同一区域的最小子集。
注意:这与找到构成线段的点的凸包不同。
编辑:顶部是初始段集。下面是删除了内部段的相同轮廓。(忽略灰色的小十字,它们只是用来标记交叉点。)