首页 > 解决方案 > 如何在 Python 中创建一个 float2 类

问题描述

我最近想使用 ursina 引擎在 python 中对光线行进进行编程。为此,我需要一个名为float2的特殊类。在统一引擎中,您可以正常编程float2并将其提供给您的参数参数,但在 python 中没有float2这样的类,我尝试做一些简单的方法来制作它,但是当我想存储变量时遇到问题。

基本上我有一个 float2 类:

class float2:
    def __init__(self, x, y):
        self.x = x,
        self.y = y

它只存储 x 和 y。

然后我有一些使用类的功能:

def length(v: float2):
    return float(sqrt(v.x*v.x + v.y*v.y))

def signedDstToCircle(p: float2, centre: float2, radius: float):
    return length(centre-p) - radius

这很好用,但我遇到了障碍。我需要从函数中分配一个变量 a:

def signedDstToBox(p: float2, centre: float2, size: float2):
    offset = float2(abs(p-centre) - size)

    # dst from point outside the box to edge (0 if inside the box)
    unsignedDst = length(max(offset, 0))

    # -dst from point inside the box to edge (0 if outside the box)
    dstInsideBox = max(min(offset, 0))
    
    return unsignedDst + dstInsideBox

如果我现在尝试运行程序,它会给我一个错误:

    offset = float2(abs(p-centre) - size)
TypeError: unsupported operand type(s) for -: 'float2' and 'float2'

我认为它给了我错误,因为它不是一个数字,所以它不能进行数学运算,而且我认为当我解决这个问题时,存储变量会有另一个问题。

如果有人知道如何使这成为可能,那么我可以进行数学运算并且也可以通过这样做来存储变量,offset = float2(abs(p-centre)-size)它将被存储,我可以通过执行offset.x和访问它offset.y

提前致谢, galfar(SpringPeace)

标签: pythonclassmathnumbers

解决方案


推荐阅读