- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 C# 3.5 创建一个应用程序,它使用 AutoCAD API 读取 2D AutoCAD 绘图,使用定义的业务逻辑对绘图进行更改,然后在 AutoCAD 中将其调整回来。由于逻辑的性质,必须重新构造绘图的形状 - 例如一个矩形由 4 条连接的直线组成。
我正在使用 AutoCAD 中每条线的起点和终点坐标创建这些形状,但有些坐标并不完全匹配。例如,一个点可能在 0.69912839(在一个轴上),但从同一点开始的线可能是 0.69990821。这些以毫米为单位,所以距离很小(0.00078 毫米!)
我创建了自己的类(称之为 MyPoint,类似于 PointF),因为我需要向它添加一些额外的逻辑。在那个类中,我创建了一个方法,它接受两个 double 值并返回 true 或 false,具体取决于两个点之间的距离是否在 0.001mm 以内。然后我覆盖了 Equals 方法,== 和 != 运算符,这样我就可以做 (point1 == point2 or point1.Equals(point2)) 检查所有轴是否在彼此的 0.001mm 以内 - 如果它们是,我将其归类为同一个点。
这很好,而且工作出色。现在,我需要检查这些点类的集合以去除所有重复项,因此我在我的集合上使用了 LINQ 的 Distinct() 方法。但是,此方法使用 GetHashcode() 而不是 Equals() 来确定实例是否相等。因此,我覆盖了使用双类的 GetHashcode 的 GetHashcode()。
但是,上面的例子失败了,因为很明显它们是不同的值,因此生成不同的哈希码。有什么方法可以使彼此相差 0.001 以内的两个数字生成相同的哈希码? (请注意,由于 GetHashcode 是在不同的类实例上分别调用的,因此数字彼此不了解。)我尝试了多种方法,这些方法适用于某些示例,但不适用于其他示例。
一个示例是将数字截断为 3dp(将其乘以 10^3,然后截断)并在结果上创建哈希码 - 这适用于上面的示例(699 == 699。)但这不起作用对于 0.69990821 和 0.70000120 (699 != 700.) 我试过四舍五入,它适用于第二组数字 (0.700 == 0.700) 但不适用于第一组 (0.699 != 0.700.) 我什至尝试过截断number 到 3dp 然后将其调整为下一个偶数,这适用于前面的两个示例,但不适用于 12.9809 和 12.9818 (12980 != 12982.)
是否有其他方法,或者我应该放弃 Equals、==、!= 和 GetHashcode 覆盖,并创建我自己的 MyPoint.IsEqualTo() 和 MyPointCollection.Distinct() 方法?
最佳答案
无法写入正确的哈希码。让我们证明一下:我们有2分。var a = point1.GetHashCode();var b = point2.GetHashCode();
如果 a!= b 让在 point1 和 point2 之间创建点。等等。
在这样的操作之后,我们将创建线,其中每个点都靠近其他点,并且它们的哈希码将相同。因此 point1 和 point2 的哈希码应该相等。
像这样覆盖:
public override int GetHashCode()
{
return 0;
}
并实现平等。
关于c# - 为近似相似的数字生成相同的哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2250659/
所以我必须用以下方法来近似 Pi:4*(1-1/3+1/5-1/7+1/9-...)。它也应该基于迭代次数。所以函数应该是这样的: >>> piApprox(1) 4.0 >>> piApprox(1
输入:图 G 输出:多个独立集,使得一个节点对所有独立集的成员资格是唯一的。因此,节点与它自己的集合中的任何节点都没有连接。这是一个示例路径。 由于这里需要澄清,因此再次改写: 将给定的图划分为多个集
我已经使用查找表和低阶多项式近似实现了定点 log2 函数,但对整个 32 位定点范围 [-1,+1) 的准确度不太满意。输入格式为 s0.31,输出格式为 s15.16。 我在这里发布这个问题,以便
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
我的目标是近似二项式变量总和的分布。我使用以下纸张The Distribution of a Sum of Binomial Random Variables作者:肯·巴特勒和迈克尔·斯蒂芬斯。 我想
我知道有方法 approximate cubic Bezier curves ( this page 也是一个很好的引用),但是有没有更快的方法来逼近 N 次贝塞尔曲线?还是只能使用下面的概括? 来自
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它有助于我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注意
我是 C++ 和编码本身的初学者,所以请原谅任何词汇错误。我找不到这个具体问题,但在互联网上找到了类似的问题,但我仍然很难获得我需要的结果。 所以我使用莱布尼茨公式来近似 pi,即: pi = 4 ·
有多种方法可以通过显示名称查找联系人。例如这个答案Android - Find a contact by display name 但是我需要找到模糊匹配的联系人。例如如果找不到“Kim”,我需要返回
我一直在尝试使用以下代码使用级数表示来近似 e 以获得尽可能多的精度数字,但无论我计算多少项,精度数字的数量似乎都保持不变。即: 2.718281984329223632812500000000000
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
大多数拥有计算机科学学位的人肯定知道什么是Big O stands for。 它有助于我们衡量一个算法的实际效率,如果您知道在what category the problem you are try
大多数拥有计算机科学学位的人肯定知道什么是Big O stands for。 它有助于我们衡量一个算法的实际效率,如果您知道在what category the problem you are try
我做了很多随机的数学程序来帮助我完成作业(合成除法是最有趣的),现在我想反转一个激进的表达式。 例如,在我方便的 TI 计算器中我得到 .2360679775 好吧,我想将该数字转换为等效的无理数表达
我可以通过 CPU 分析器看到,compute_variances() 是我项目的瓶颈。 % cumulative self self total
大多数拥有 CS 学位的人肯定知道什么 Big O stands for . 它帮助我们衡量算法的可扩展性。 但我很好奇,你如何计算或近似算法的复杂性? 最佳答案 我会尽我所能用简单的术语在这里解释它
这是迄今为止我的代码, from math import * def main(): sides = eval(input("Enter the number of sides:"))
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
大多数拥有 CS 学位的人肯定知道什么 Big O stands for . 它帮助我们衡量算法的扩展性。 但我很好奇,你如何计算或近似算法的复杂性? 最佳答案 我会尽我所能用简单的术语在这里解释它,
我是一名优秀的程序员,十分优秀!