Python 使用不同参数时生成的重复数据

Python 使用不同参数时生成的重复数据,python,function,Python,Function,我有两个函数,第一个是2D曲线生成器,它有7个参数,工作很好第二个函数主要基于第一个函数,但是它在3D中工作,但是它不工作,好像我用3D函数生成了两条不同的曲线,它们应该出来的时候是一样的不一样。我举个例子: curve_1=build_curve_3D(0,10,10,2,4,6,5,8,9,10) 曲线2=构建曲线3D(5,7,2,19,15,12,67,9,2,10) 这将返回两组3,列出所有包含唯一点的集合,但这是本例的输出 打印(曲线1) ([5, 6.400000000000005

我有两个函数,第一个是2D曲线生成器,它有7个参数,工作很好第二个函数主要基于第一个函数,但是它在3D中工作,但是它不工作,好像我用3D函数生成了两条不同的曲线,它们应该出来的时候是一样的不一样。我举个例子:

curve_1=build_curve_3D(0,10,10,2,4,6,5,8,9,10)
曲线2=构建曲线3D(5,7,2,19,15,12,67,9,2,10)
这将返回两组3,列出所有包含唯一点的集合,但这是本例的输出

打印(曲线1) ([5, 6.400000000000005, 9.879999999999983, 14.03999999999999, 18.880000000000006, 24.4, 30.59999999999995, 37.48, 45.0399999999999, 53.280000000000136, 67], [7, 7.800000000000003, 9.119999999999996, 10.159999999999997, 10.92, 11.400000000000004, 11.6, 11.519999999999996, 11.160000000000007, 10.51999999999998, 9], [2, 3.0, 4.6, 5.800000000000002, 6.600000000000001, 7.0, 7.0, 6.6000000000000005, 5.8000000000000025, 4.6000000000000005, 2]) >>>打印(曲线2) ([5, 6.400000000000005, 9.879999999999983, 14.03999999999999, 18.880000000000006, 24.4, 30.59999999999995, 37.48, 45.0399999999999, 53.280000000000136, 67], [7, 7.800000000000003, 9.119999999999996, 10.159999999999997, 10.92, 11.400000000000004, 11.6, 11.519999999999996, 11.160000000000007, 10.51999999999998, 9], [2, 3.0, 4.6, 5.800000000000002, 6.600000000000001, 7.0, 7.0, 6.6000000000000005, 5.8000000000000025, 4.6000000000000005, 2]) 正如您所看到的,由于某些原因,这两条单独的曲线产生了相同的结果,因此我将发布所有代码,以便比较这两个函数并希望解决问题

导入matplotlib.pyplot作为plt
全局曲线x,曲线y,曲线z
曲线x,曲线y,曲线z=[],[],[]
def构建曲线二维(开始x、开始y、控制x、控制y、结束x、结束y、分辨率):
曲线_x.clear()
曲线y.clear()
控制线
控制线y=[]
引导线
引导线y=[]
曲线附加(开始)
曲线y.追加(开始y)
对于范围内的循环(0,分辨率):
引导线附加(开始x+((控制x-开始x)/分辨率)*循环)
引导线附加(起始y+((控制y-起始y)/分辨率)*循环)
控制线附加(控制线+((结束-控制线)/分辨率)*循环)
控制线追加(控制y+((结束y-控制y)/分辨率)*循环)
对于范围内的点(0,分辨率-1):
曲线x.附加((uuu查找uuu相交uuu)(参考线u x[点]、参考线u y[点],
控制线x[点]、控制线y[点],
引导线x[点+1],引导线y[点+1],
控制线(x[点+1],控制线(y[点+1]))[0])
曲线y.追加((uu查找uu相交uu u u u u u u,
控制线x[点]、控制线y[点],
引导线x[点+1],引导线y[点+1],
控制线(x[点+1],控制线(y[点+1]))[1])
曲线附加(结束)
曲线y.追加(结束y)
返回曲线x,曲线y
def构建曲线3D(开始x、开始y、开始z、控制x、控制y、控制z、结束x、结束y、结束z、分辨率):
曲线_x.clear()
曲线y.clear()
曲线_z.清除()
曲线附加(开始)
曲线y.追加(开始y)
曲线附加(开始)
控制线
控制线y=[]
控制线_z=[]
引导线
引导线y=[]
引导线_z=[]
对于范围内的循环(0,分辨率):
引导线附加(开始x+((控制x-开始x)/分辨率)*循环)
引导线附加(起始y+((控制y-起始y)/分辨率)*循环)
引导线附加(起始z+((控制z-起始z)/分辨率)*循环)
控制线附加(控制线+((结束-控制线)/分辨率)*循环)
控制线追加(控制y+((结束y-控制y)/分辨率)*循环)
控制线附加(控制线+((结束-控制线)/分辨率)*循环)
对于范围内的点(0,分辨率-1):
曲线x.附加((uuu查找uuu相交uuu)(参考线u x[点]、参考线u y[点],
控制线x[点]、控制线y[点],
引导线x[点+1],引导线y[点+1],
控制线(x[点+1],控制线(y[点+1]))[0])
曲线y.追加((uu查找uu相交uu u u u u u u,
控制线x[点]、控制线y[点],
引导线x[点+1],引导线y[点+1],
控制线(x[点+1],控制线(y[点+1]))[1])
曲线z.附加((uuu查找uuu相交uuu)(参考线u x[点]、参考线u z[点],
控制线x[点]、控制线z[点],
引导线x[点+1],引导线z[点+1],
控制线(x[点+1],控制线(z[点+1]))[1])
曲线附加(结束)
曲线y.追加(结束y)
曲线附加(结束)
返回曲线x,曲线y,曲线z
定义查找交叉点(x1、y1、x2、y2、x3、y3、x4、y4):
px=((x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4))/((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4))
py=((x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4))/((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4))
返回px,py
类测试():
def单图形测试(曲线、颜色):
figure=plt.figure(‘单个图形’)
ax=plt.轴(投影='3d')
ax.绘图(曲线[0],曲线[1],曲线[2],颜色)
plt.show()
def双
import matplotlib.pyplot as plt

def build_curve_3D(start_x, start_y, start_z, control_x, control_y, control_z, end_x, end_y, end_z, resolution):
  
  curve_x, curve_y, curve_z = [], [], []

  curve_x.append(start_x)
  curve_y.append(start_y)
  curve_z.append(start_z)

  control_line_x = []
  control_line_y = []
  control_line_z = []
  guide_line_x = []
  guide_line_y = []
  guide_line_z = []

  for cycle in range(0,resolution):
    
    guide_line_x.append(start_x + ((control_x - start_x)/resolution) * cycle)
    guide_line_y.append(start_y + ((control_y - start_y)/resolution) * cycle)
    guide_line_z.append(start_z + ((control_z - start_z)/resolution) * cycle)
    
    control_line_x.append(control_x + ((end_x - control_x)/resolution) * cycle)
    control_line_y.append(control_y + ((end_y - control_y)/resolution) * cycle)
    control_line_z.append(control_z + ((end_z - control_z)/resolution) * cycle)

  for points in range(0,resolution -1):
    
    curve_x.append((__find__intersection__(guide_line_x[points],guide_line_y[points],
                                           control_line_x[points],control_line_y[points],
                                           guide_line_x[points+1],guide_line_y[points+1],
                                           control_line_x[points+1],control_line_y[points+1]))[0])
    
    curve_y.append((__find__intersection__(guide_line_x[points],guide_line_y[points],
                                           control_line_x[points],control_line_y[points],
                                           guide_line_x[points+1],guide_line_y[points+1],
                                           control_line_x[points+1],control_line_y[points+1]))[1])
    
    curve_z.append((__find__intersection__(guide_line_x[points],guide_line_z[points],
                                           control_line_x[points],control_line_z[points],
                                           guide_line_x[points+1],guide_line_z[points+1],
                                           control_line_x[points+1],control_line_z[points+1]))[1])
    
    
    
  curve_x.append(end_x)
  curve_y.append(end_y)
  curve_z.append(end_z)

  return curve_x, curve_y, curve_z
    
def __find__intersection__(x1,y1,x2,y2,x3,y3,x4,y4):
  
  px = ((x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4))/((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4))
  py = ((x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4))/((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4))

  return px , py


curve_1 = build_curve_3D(0,10,10,2,4,6,5,8,9,10)
curve_2 = build_curve_3D(5,7,2,19,15,12,67,9,2,10)

curve_1 != curve_2