# coding=utf-8
from decimal import Decimal, getcontext
from Vector import Vector
getcontext().prec = 30
class Line(object):
NO_NONZERO_ELTS_FOUND_MSG = 'No nonzero elements found'
# 直线法向量和直线等式的常量 法向量给出了标注直线形式的系数
def __init__(self, normal_vector=None, constant_term=None):
self.dimension = 2
# if not normal_vector:
# all_zeros = [0]*self.dimension
# normal_vector = Vector(all_zeros)
# self.normal_vector = normal_vector
self.normal_vector = normal_vector
# if not constant_term:
# constant_term = Decimal('0')
# self.constant_term = Decimal(constant_term)
self.constant_term = constant_term
self.set_basepoint()
def set_basepoint(self):
try:
n = self.normal_vector
c = self.constant_term
basepoint_coords = [0]*self.dimension
initial_index = Line.first_nonzero_index(n)
initial_coefficient = n[initial_index]
basepoint_coords[initial_index] = c/initial_coefficient
self.basepoint = Vector(basepoint_coords)
except Exception as e:
if str(e) == Line.NO_NONZERO_ELTS_FOUND_MSG:
self.basepoint = None
else:
raise e
# 输出直线等式的标准形式
def __str__(self):
num_decimal_places = 3
def write_coefficient(coefficient, is_initial_term=False):
coefficient = round(coefficient, num_decimal_places)
if coefficient % 1 == 0:
coefficient = int(coefficient)
output = ''
if coefficient < 0:
output += '-'
if coefficient > 0 and not is_initial_term:
output += '+'
if not is_initial_term:
output += ' '
if abs(coefficient) != 1:
output += '{}'.format(abs(coefficient))
return output
n = self.normal_vector
try:
initial_index &
二维空间里的直线 计算 是否平行/ 是否是一条直线/ 是否有交点
最新推荐文章于 2023-10-18 13:52:49 发布