裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

点と直線の距離

2010年07月15日 | ブログラミング
# (x1, y1) と (x2, y2) を通る直線に,(x3, y3) からおろした垂線の長さを求める
# (x3, y3) から (x1, y1) と (x2, y2) を通る直線への距離を求める
prog <- function(x1, y1, x2, y2, x3, y3)
{
a <- (y2-y1)/(x2-x1)
x <- (x3/a+y3+a*x1-y1)/(a+1/a)
y <- a*(x-x1)+y1
return(c(x=x, y=y, l=sqrt((x-x3)^2+(y-y3)^2)))
}
# 以下は,利用法と説明図を描くためのプログラム
line2 <- function(x1, y1, x2, y2)
{
abline(y1-(y2-y1)/(x2-x1)*x1, (y2-y1)/(x2-x1), col="green")
}
x1 <- 1; y1 <- 3
x2 <- 5; y2 <- 5
x3 <- 2; y3 <- 6
(ans <- prog(x1, y1, x2, y2, x3, y3))
par(xpd=TRUE, mar=c(5, 5, 2, 2))
x <- ans["x"]
y <- ans["y"]
l <- ans["l"]
plot(c(x1, x2, x3, x), c(y1, y2, y3, y), pch=19, xlab="x", ylab="y", asp=1)
line2(x1, y1, x2, y2)
segments(x3, y3, x, y, col="red")
abline(v=x, h=y, col="blue", lty=3)
text(c(x1, x2, x3), c(y1, y2, y3), paste("(x", 1:3, ", y", 1:3, ")", sep=""), pos=4)
text(x, y, "(x, y)", pos=4)

実行により,
x y l
3.000000 4.000000 2.236068
を得る。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 直線と垂直に交わる直線の切... | トップ | あんたは本当に初心者の味方... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事