2015-05-19 19 views
0

G'day!當我知道一條直線的斜率和y軸截距時,我需要計算一條距離直線1單位的x值。例如,如果pointA =(4,5),並且我設置了一條以0斜率(因此5爲y截距)的直線,那麼我想要的x值將是5.如果斜率未定義(垂直),那麼x值將是4.依此類推。計算從seg的末端開始沿線段一個點的點數

到目前爲止,我計算x爲x = m(point[0]+1)-b。然而,這對於垂直線不太好。 Thisthis是相似的,但我不能讀取C#的第一個,並在第二個,我不需要消除任何可能的點(還)。

+1

您將需要特殊情況下的垂直線,因爲有「關於直線x + 1」的數學含義,用垂直線不管。 –

回答

1

這是一種擊中大錘釘子,但如果你將要經常跑成幾何問題,我想的寫或找點/ Vector類像

import math 
class Vector(): 
    def __init__(self, x=0.0, y=0.0, z=0.0): 
     self.x = x 
     self.y = y 
     self.z = z 

    def __add__(self, other): 
     self.x += other.x 
     self.y += other.y 
     self.z += other.z 
     return self 

    def __sub__(self, other): 
     self.x -= other.x 
     self.y -= other.y 
     self.z -= other.z 
     return self 

    def dot(self, other): 
     return self.x*other.x + self.y*other.y + self.z*other.z 

    def cross(self, other): 
     tempX = self.y*other.z - self.z*other.y 
     tempY = self.z*other.x - solf.x*other.z 
     tempZ = self.x*other.y - self.y*other.x 
     return Vector(tempX, tempY, tempZ) 

    def dist(self, other): 
     return math.sqrt((self.x-other.x)**2 + (self.y-other.y)**2 + (self.z-other.z)**2) 

    def unitVector(self): 
     mag = self.dist(Vector()) 
     if mag != 0.0: 
      return Vector(self.x * 1.0/mag, self.y * 1.0/mag, self.z * 1.0/mag) 
     else: 
      return Vector() 

    def __repr__(self): 
     return str([self.x, self.y, self.z]) 

然後,你可以通過減去兩點

>>> a = Vector(4,5,0) 
>>> b = Vector(5,6,0) 
>>> b - a 
[1, 1, 0] 

或添加任意單位向量的點做各種像找到矢量的東西找到一個新的點(這是回答你原來的問題)

>>> a = Vector(4,5,0) 
>>> direction = Vector(10, 1, 0).unitVector() 
>>> a + direction 
[4.995037190209989, 5.099503719020999, 0.0] 

您可以添加更多的實用程序,比如允許縮放矢量/標量運算等