标签:__ 直线 self init 计算 交点 class def Point2D
简介
说来简单,实现难
使用直线的一般式方程 \(Ax+By+C=0\) 联立方程组求解
TIPS 可以只用 scipy linalg 求解线性方程组
code
# coding=utf-8
from scipy.optimize import fsolve #导入求解方程组的函数 非线性方程组
import numpy as np
from scipy import linalg
class Point2D:
# AX+BY+C = 0
# 二维的一般式方程
def __init__(self, x, y):
self.x = x
self.y = y
class Line2D:
# AX+BY+C = 0
# # 二维的一般式方程
def __init__(self, A, B, C):
self.A = A
self.B = B
self.C = C
def init_from_two_point2d(self, a, b):
self.A = b.y - a.y
self.B = a.x - b.x
self.C = b.x * a.y - a.x * b.y
def getABC(self):
return self.A, self.B, self.C
class Point3D:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
class Vec3D:
'''
向量
'''
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
class Line3D:
# 点向式
# 二维的一般式方程
def __init__(self, a, b, c, x_0, y_0, z_0):
self.a = a
self.b = b
self.c = c
self.x_0 = x_0
self.y_0 = y_0
self.z_0 = z_0
def f(x):
A = x[0]
B = x[1]
C = x[2]
AA = x[3]
BB = x[4]
CC = x[5]
return [A]
def intersection_line2D_line2D(line1, line2):
A,B,C = line1.getABC()
D,E,F = line2.getABC()
AA = np.array([[A, B], [D, E]])
BB = np.array([-C, -F])
x = linalg.solve(AA, BB)
print("[DEBUG] intersection on the point[x,y]", x)
if __name__ == "__main__":
a = Point2D(0,0)
b = Point2D(1,1)
c = Point2D(0,1)
d = Point2D(1,0)
l = Line2D(0,0,0)
l.init_from_two_point2d(a, b)
n = Line2D(0,0,0)
n.init_from_two_point2d(c, d)
intersection_line2D_line2D(l, n)
标签:__,直线,self,init,计算,交点,class,def,Point2D 来源: https://www.cnblogs.com/eat-too-much/p/13718737.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。