因此,我了解到在编程中使用平方根总是不好的做法,尤其是在每个更新步骤中。我正在尝试在圆之间进行逼真的弹性碰撞,并且我一直在阅读以下内容:http
:
//www.vobarian.com/collisions/2dcollisions2.pdf是否可以在不使用平方根的情况下标准化向量?还是做我正在做的任何快速方法?
乘以
大小平方的快速逆平方根进行归一化。
归一化向量意味着将其每个分量除以该向量的大小。大小等于sqrt(x**2 + y**2)
,其中x
和y
是向量的分量。但是平方根很慢,我们宁愿避免。因此,sqrt(x**2 + y**2)
我们选择乘以幅度的反平方根,而不是除以1 / sqrt(x**2 + y**2)
。
为什么有帮助?因为制作Quake III的优秀人才提出了一种非常快速的计算方法1 / sqrt(x**2 + y**2)
,我们称之为 快速逆平方根
。
换句话说,fisqrt(x)
等于1 / sqrt(x)
,但是计算fisqrt(x)
比计算快得多1 / sqrt(x)
。
这是一些伪python来说明如何将它们组合在一起。
def fisqrt(x):
# See article for implementation details.
def normalize(vector):
magnitude_squared = vector.x**2 + vector.y**2
invsqrt = fisqrt(magnitude_squared)
vector.v *= invsqrt
vector.y *= invsqrt
return vector
另外,您可以“剔除”更昂贵的碰撞检查(以下为伪python):
def magnitudeSquared(vector):
return vector.x ** 2 + vector.y ** 2
def cull(circleA, circleB):
# Save a square root by calling magnitudeSquared.
# Assuming that circle.center is a vector with x and y components.
minCollisionDistance = circleA.radius + circleB.radius
if magnitudeSquared(circleA.center - circleB.center) <= minCollisionDistance ** 2:
# Circles overlap, can't cull.
return false
# Circles do not overlap, can cull!
return true
cull
在进行其他碰撞检查之前先致电。当cull
返回true时,您不需要做任何进一步的检查,因为两个圆圈不可能彼此接触。很好,因为它cull
几乎肯定会比您可能使用的其他碰撞检测方法快。如果cull
返回假,则圆的面积在某处重叠,因此您可以调用更昂贵的物理建模算法。
问题内容: 半向量的公式为(Hv)=(Lv + Vv)/ | Lv + Vv |,其中Lv是光向量,Vv是视点向量。 我在Python代码中这样做正确吗? 问题答案: 这是错误的名称。您所写的是两个向量的简单向量加法,结果是归一化的单位向量。 这是我的处理方式:
假设我要计算8的平方根。如下所示,有两种方法可以显示结果: 我认为获得第二个解决方案的最好方法是: 我想在我的Java应用程序中尝试do display 2√2而不是2828 427...所以我想按照这些步骤开发一个类。让我们考虑8的平方根。 null 我想我可以在一个数组中存储每个基数的指数,然后尝试以某种方式导出它。你有什么建议吗?
我想知道我是否正确理解了图像的平均归一化。 据我所知,您计算所有像素的平均值(假设它是灰度)。然后,对于每个像素,减去该平均值。 但是,人们应该如何处理可能出现的负值呢?例如,整个图像的平均值为100,但一个特定像素的强度为90。在这个标准化之后,像素的值将是-10。
我在制作一个向量时遇到了麻烦,它会返回向量的原始元素平方。 这是我得到的错误。
Python3 实例 平方根,又叫二次方根,表示为〔√ ̄〕,如:数学语言为:√ ̄16=4。语言描述为:根号下16=4。 以下实例为通过用户输入一个数字,并计算这个数字的平方根: 实例(Python 3.0+)# -*- coding: UTF-8 -*- # Filename : test.py # author by : www.runoob.com num = float(input('请输入
顺便说一句,我试图解决时间复杂性,我找到了O(2^n)。正确吗?