Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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的三维直线上点的z坐标_Python_Math_Geometry - Fatal编程技术网

使用python的三维直线上点的z坐标

使用python的三维直线上点的z坐标,python,math,geometry,Python,Math,Geometry,如果我在3D中有一个点的x,y坐标,我需要使用python获得这个z坐标,我怎么做??我有3D线条的起点(x1,y1,z1)和终点(x2,y2,z2),因此请提供任何建议???您可以轻松为线条设置参数方程: x = x1 + (x2 - x1)*t y = y1 + (y2 - y1)*t z = z1 + (z2 - z1)*t 给定a(x,y),求解t的方程: x = x1 + (x2 - x1)*t 所以 或 现在您知道了t,您可以找到z: z = z1 + (z2 - z1)*t

如果我在3D中有一个点的x,y坐标,我需要使用python获得这个z坐标,我怎么做??我有3D线条的起点(x1,y1,z1)和终点(x2,y2,z2),因此请提供任何建议???

您可以轻松为线条设置参数方程:

x = x1 + (x2 - x1)*t
y = y1 + (y2 - y1)*t
z = z1 + (z2 - z1)*t
给定a(x,y),求解
t
的方程:

x = x1 + (x2 - x1)*t
所以

现在您知道了
t
,您可以找到
z

z = z1 + (z2 - z1)*t
因此,在Python中,它将是:

def computeZ(p1,p2,x,y):
    x1,y1,z1 = p1
    x2,y2,z2 = p2

    if x2 - x1 != 0:
        t = (x - x1) / (x2 - x1)
    elif:
        t = (y - y1) / (y2 - y1)
    else:
        print "no unique z value exists"
        return 0

    return z1 + (z2 - z1)*t
((A - x1)*(z2 - z1)/(x2 - x1)) + z1

您可以轻松设置直线的参数化方程:

x = x1 + (x2 - x1)*t
y = y1 + (y2 - y1)*t
z = z1 + (z2 - z1)*t
给定a(x,y),求解
t
的方程:

x = x1 + (x2 - x1)*t
所以

现在您知道了
t
,您可以找到
z

z = z1 + (z2 - z1)*t
因此,在Python中,它将是:

def computeZ(p1,p2,x,y):
    x1,y1,z1 = p1
    x2,y2,z2 = p2

    if x2 - x1 != 0:
        t = (x - x1) / (x2 - x1)
    elif:
        t = (y - y1) / (y2 - y1)
    else:
        print "no unique z value exists"
        return 0

    return z1 + (z2 - z1)*t
((A - x1)*(z2 - z1)/(x2 - x1)) + z1

您只需要知道X或Y值,而不是两者都知道。如果你有一个X值,那么方程是:

def computeZ(p1,p2,x,y):
    x1,y1,z1 = p1
    x2,y2,z2 = p2

    if x2 - x1 != 0:
        t = (x - x1) / (x2 - x1)
    elif:
        t = (y - y1) / (y2 - y1)
    else:
        print "no unique z value exists"
        return 0

    return z1 + (z2 - z1)*t
((A - x1)*(z2 - z1)/(x2 - x1)) + z1
使用此选项,您可以插入两个初始点和一个x,然后获得新点,如下所示:

def get_points(p1, p2, x):
    x1, y1, z1 = p1
    x2, y2, z2 = p2

    new_z = ((x - x1)*(z2 - z1)/(x2 - x1)) + z1
    new_y = ((x - x1)*(y2 - y1)/(x2 - x1)) + y1

    new_p = (x, new_y, new_z)
    return new_p

您只需要知道X或Y值,而不是两者都知道。如果你有一个X值,那么方程是:

def computeZ(p1,p2,x,y):
    x1,y1,z1 = p1
    x2,y2,z2 = p2

    if x2 - x1 != 0:
        t = (x - x1) / (x2 - x1)
    elif:
        t = (y - y1) / (y2 - y1)
    else:
        print "no unique z value exists"
        return 0

    return z1 + (z2 - z1)*t
((A - x1)*(z2 - z1)/(x2 - x1)) + z1
使用此选项,您可以插入两个初始点和一个x,然后获得新点,如下所示:

def get_points(p1, p2, x):
    x1, y1, z1 = p1
    x2, y2, z2 = p2

    new_z = ((x - x1)*(z2 - z1)/(x2 - x1)) + z1
    new_y = ((x - x1)*(y2 - y1)/(x2 - x1)) + y1

    new_p = (x, new_y, new_z)
    return new_p

如果
x1==x2
y1==y2
你如何处理?这更像是一个数学问题,在堆栈交换上有一个不同的论坛。如果
x1==x2
y1==y2
你如何处理?这更像是一个数学问题,在堆栈交换上有一个不同的论坛。当x2-x1为零时会发生什么?当我意识到我忘记解释直线是否平行于长轴时,你已经有了答案,所以我决定让我的保持原样,让你的被选为正确当x2-x1为零时会发生什么?当我意识到我忘了解释这条线是否平行于长轴时,你已经得到了你的答案,所以我决定让我的保持原样,让你的被选为正确