我已經得到了一個點(x0,y0)。我想要找到從(x0,y0)開始的所有點,這個點相對於x軸的角度爲θ。我手上只有(x0,y0)和theta。而已。我如何去做這件事?沿特定角度的一條線上的所有點
回答
角度的餘弦給你在x方向上的步驟,角度的正弦給你在y方向上的步驟。最好採用這種方法,而不是找到線的梯度,因爲對於垂直線,梯度是無限的。
在計算機上找不到全部點,因爲它們的數量是無限的,所以您必須決定步長和步數。這在下面的Python程序中進行了說明,該程序選擇步長爲1和100的步驟。
import math, matplotlib.pyplot as plt
def pts(x0,y0,theta):
t = range(101) # t=0,1,2,3,4,5...,100
x = [x0 + tt*math.cos(theta) for tt in t]
y = [y0 + tt*math.sin(theta) for tt in t]
return x,y
def degrees2radians(degrees):
return degrees * math.pi/180
degrees = 45
x,y=pts(-100,-100, degrees2radians(degrees))
plt.plot(x, y, label='{} degrees'.format(degrees))
degrees = 90
x,y=pts(100,100, degrees2radians(degrees))
plt.plot(x, y, label='{} degrees'.format(degrees))
plt.xlim(-100,300)
plt.ylim(-100,300)
plt.legend()
plt.show()
和輸出
下面R程序採用類似的方法。
drawline=function(x0,y0,theta) {
t=0:100 # t = 0,1,2,3,4,5,...,100
# x formed by stepping by cos theta each time
x=x0 + t*cos(theta)
# y formed by stepping by sin theta each time
y=y0 + t*sin(theta)
# plot
rng=c(min(x,y),max(x,y)) # range
plot(y~x,xlim=rng,ylim=rng,type="l")
}
這裏,theta
是弧度。因此drawline(-100,-100,pi/4)
對應於45度並給出第一個圖,而drawline(100,100,pi/2)
對應於90度,並給出第二個圖左側顯示的垂直線。
我面臨的另一個問題是,我需要生成整數座標,比如說10個座標,沿着從(x0,y0)開始的角度theta theta,因爲我正在處理圖像。如果我在角度的餘弦或正弦上使用地板或小屋,我可能會多次生成相同的座標。我如何去做這件事? – user3488947
@ user3488947在這種情況下,您可以使用en.wikipedia.org/wiki/Bresenham's_line_algorithm,如Salix alba的評論中所述。 – TooTone
但Bresenham的算法需要線上的兩點。不是嗎? – user3488947
- 1. 沿着一條對角線編程0s
- 2. 如何通過給定角度在中點上旋轉線條?
- 3. Java Swing,以特定角度畫一條線?
- 4. 在Java中以特定角度畫一條線
- 5. 兩條線在同一點處的起點角度
- 6. 得到經緯度沿2點定義的線上的點的位置
- 7. 具有相同原點的兩條線之間的角度?
- 8. 給定一個起點和終點,和距離,計算點沿着一條線
- 9. 找到沿着一條直線的一點
- 10. 在兩條線的角處的角度
- 11. 確定兩條線之間的SVG路徑上的角度
- 12. 找出使用中點公式的線條上的所有點
- 13. 如何更改一條特定線的網格線寬度
- 14. 確定沿着點和線段的每條可能路徑
- 15. 確定的算法是一個點沿着一條線或相當接近
- 16. 從一個起點和三維角度計算一條線
- 17. 沿着給定的矢量繪製一個帶有頂點,高度和角度信息的3D錐體matplotlib
- 18. 帶有固定角度的對角線與css中的曲線
- 19. 查找所有給定幾條對角線的多邊形
- 20. 計算圓上一點的座標,沿圓的中心與另一點之間的一條直線?
- 21. 給定長度的兩條線之間的角度
- 22. 在QT中繪製具有特定角度的多義線
- 23. 貝塞爾曲線上給定點的角度?
- 24. 以特定角度畫線(動態)
- 25. 繪製一條線一個特定的點,matplotlib
- 26. 沿對角線拖放?
- 27. 沿線遞增點
- 28. 在特定的NSTableview單元格中對角線繪製線條
- 29. 使用角度觀看頁面上的所有錨點
- 30. 創建從另一條線上的一個點開始並以給定角度延伸給定長度的線的最佳方式是什麼?
這個問題更適合http://math.stackexchange.com。你會在那裏得到更多深入的答案。乾杯! – MBlanc
@MBlanc其實更多的是一個計算問題。對於一個數學家來說,會有無數的點數,我認爲這是不需要的。對於有限數量的點,您可能需要https://en.wikipedia.org/wiki/Bresenham's_line_algorithm。但是最好使用合適的庫函數'drawLine(x0,y0,x0 + r * cos(angle),y0 + r * sin(angle))'。 –