Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 旋转矩阵缩小_Python_Python 3.x_3d_Rotational Matrices - Fatal编程技术网

Python 旋转矩阵缩小

Python 旋转矩阵缩小,python,python-3.x,3d,rotational-matrices,Python,Python 3.x,3d,Rotational Matrices,我试图建立一些微型“3d引擎”,以了解这个领域的基础知识。 除了旋转外,一切都很好。我使用标准的旋转矩阵来实现这一点,但是所有3种可能的旋转不仅旋转点,还缩小它们的比例。这种行为不是有意或希望的。 以下是守则的相关部分(我认为): 我想这就是你所需要的。欢迎任何指向我错在哪里的指点。 我知道在这里的示例中,类缺少缩进,我在这个网站上的布局很糟糕:) p、 我尝试使用“mpf()”函数来提高精度,但结果为0。问题出在这一部分: def rotateXY(self, degrees): ra

我试图建立一些微型“3d引擎”,以了解这个领域的基础知识。 除了旋转外,一切都很好。我使用标准的旋转矩阵来实现这一点,但是所有3种可能的旋转不仅旋转点,还缩小它们的比例。这种行为不是有意或希望的。 以下是守则的相关部分(我认为):

我想这就是你所需要的。欢迎任何指向我错在哪里的指点。 我知道在这里的示例中,类缺少缩进,我在这个网站上的布局很糟糕:)


p、 我尝试使用“mpf()”函数来提高精度,但结果为0。

问题出在这一部分:

def rotateXY(self, degrees):
    radians = mpf(math.radians(degrees))

    self.x = (math.cos(radians) * self.x) + (- math.sin(radians) * self.y)
    self.y = (math.sin(radians) * self.x) + (math.cos(radians) * self.y)
    return self
正在使用已调整的self.x计算self.y,从而导致给定的问题

解决此问题的方法是使用以下temp变量:

def rotateXY(self, degrees):
    radians = mpf(math.radians(degrees))

    tempX = (math.cos(radians) * self.x) + (- math.sin(radians) * self.y)
    self.y = (math.sin(radians) * self.x) + (math.cos(radians) * self.y)
    self.x = tempX
    return self

你能定义“缩小”吗?如果你测试每一个旋转向量的大小,结果都是一样的。我用pygame给我一个视觉表示,点不仅围绕(0,0,0)旋转,而且每次旋转都会更接近它。如果有足够的旋转,每个点都会在(0,0,0)上结束,这显然是不需要的。顺便说一下,如果你不知道,如果你的类有一个
\uuuuuuu添加
函数,你不需要有
addXtoY
函数,只需要使用
+=/code>操作符,我想我找到了解决方案,我用已经调整过的self.x来计算self.y,我现在来看看。
def rotateXY(self, degrees):
    radians = mpf(math.radians(degrees))

    tempX = (math.cos(radians) * self.x) + (- math.sin(radians) * self.y)
    self.y = (math.sin(radians) * self.x) + (math.cos(radians) * self.y)
    self.x = tempX
    return self