我有一個線段圖案,這是在90度角到另一行:如何通過在spatstat中錨定中點來旋轉psp對象?
require(spatstat)
range <- c(0,10)
owin <- owin(xrange = range, yrange = range)
l1 <- psp(x0 = 8, x1 = 8, y0 = 2, y1 = 8, window = owin, marks = "l1")
l2 <- psp(x0 = 6, x1 = 6, y0 = 2, y1 = 8, window = owin, marks = "l2")
l3 <- psp(x0 = 4, x1 = 4, y0 = 2, y1 = 8, window = owin, marks = "l3")
l4 <- psp(x0 = 2, x1 = 2, y0 = 2, y1 = 8, window = owin, marks = "l4")
lines <- superimpose(l1, l2, l3, l4)
main <- psp(x0 = 8, x1 = 0, y0 = 5, y1 = 5, window = owin, marks = "main")
angles.psp(lines)*(180/pi)
[1] 90 90 90 90
這裏是一個視覺表示:
plot(x = range, y = range, type = "n", main = "", asp = 1, axes = F, xlab = "x", ylab = "y")
plot(lines, col = "darkgrey", add = T)
plot(main, col = "black", add = T)
axis(1)
axis(2, las = 2)
現在我想旋轉lines
以便它們在相同的點但以45度的角度穿過main
。
lines.rotated <- rotate(lines, -0.7853982)
angles.psp(lines.rotated)*(180/pi)
[1] 45 45 45 45
這工作,但angles.psp
功能似乎單獨旋轉,而不是行窗口(owin
)因爲我想要的。
plot(x = range, y = range, type = "n", main = "", asp = 1, axes = F, xlab = "x", ylab = "y")
plot(lines, col = "darkgrey", add = T)
plot(lines.rotated, col = "blue", add = T)
plot(main, col = "black", add = T)
axis(1)
axis(2, las = 2)
有一種方法,以相對於lines
所有旋轉到main
線,使得所述角度爲45度,但交叉點保持不變?
@EgeRubak謝謝。我認爲這是解決問題比使用外部軟件包更好的解決方案。 @PauloCardoso有一個好點。實現這一點不應該需要對代碼進行非常大的修改,因爲可以將'W'與'main' /附加的可選行而不是'X'聯繫起來。 – Mikko
我完全錯過了這一點。對於那個很抱歉。我將使用修改後的代碼編輯我的答案,以找到與測試線L的所有交點,並在每個交點周圍以指定角度旋轉每條線。 –
我對stackoverflow很陌生,所以我不確定最好的策略是編輯自己的答案還是提供一個新的答案。現在,我看着我編輯的代碼@PauloCardoso的評論不再有意義。做出這樣的改變,原來的評論不再是相關的,被認爲是不好的風格?在另一個說明中,也許原始海報應該編輯問題的標題,因爲我們不再固定中間點,而是與另一條線交叉點。 –