次のように定義された円があるとします。
X^2 + Y^2 = r^2
円の原点は0
とradius = 1
です。原点から座標とともに右に移動する水平線を引く(x1,y1)=(0,0)
と、(x2,y2) = (2,0)
この線は円と交差するはずです。例えば
library(plotrix)
plot(0,0,xlim=c(-3,3),ylim=c(-2,2))
draw.circle(0,0,1)
lines(c(0,2),c(0,0))
線と円の交点を見つけようとしましたが、うまくいきませんでした。このwolfram ページからアプローチして、次のコードを作成しましたが、正しい結果が得られないようです。誰かが私の(間違いなく)愚かな間違いを指摘してもらえますか?
r <- 1
id <- 1:5
x1 <- c(0)
y1 <- c(0)
x2 <- c(2)
y2 <- c(0)
df <- data.frame(id,x1,y1,x2,y2)
df <- transform(df, dx = x2-x1)
df <- transform(df, dy = y2-y1)
df <- transform(df, dr = sqrt(dx^2+dy^2))
df <- transform(df, D = (x1*y2)-(x2*y1))
df <- transform(df, dysign = sapply(dy,function(x) ifelse(x < 0,-1,1)))
df <- transform(df, newxplus = (D*dy + (dysign*dy) *dx*sqrt(r^2*dr^2-D^2))/dr^2)
df <- transform(df, newxneg = (D*dy - (dysign*dy) *dx*sqrt(r^2*dr^2-D^2))/dr^2)
df <- transform(df, newyplus = (-D*dx + (abs(dy)) *sqrt(r^2*dr^2-D^2))/dr^2)
df <- transform(df, newyneg = (-D*dx - (abs(dy)) *sqrt(r^2*dr^2-D^2))/dr^2)
# where newxplus and newxneg are the two x coordinates for the two possible intercepts
# similarly for newyplus and newyneg
df