ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

计算直线和直线的交点 2维

2020-09-23 15:34:15  阅读:217  来源: 互联网

标签:__ 直线 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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有