可以用
draw.arc (in plotrix)
这个是根据圆心、半径和角度来画圆弧。
我自己写了一个画圆弧函数,
输入是两个端点,半径,自动计算出圆心,
还可以指定顺时针、逆时针,大弧还是小弧 -
my.angle <- function(x, y) {
if (y >= 0)
angle = acos(x)
else
angle = 2*pi - acos(x)
angle
}
my.arc <- function(p0, p1, radius,
small.arc = TRUE, clock.wise = FALSE, n = 35) {
x0 = p0[1]
x1 = p1[1]
y0 = p0[2]
y1 = p1[2]
dx = x1 - x0
dy = y1 - y0
t = sqrt((radius^2 - (dx^2/4 + dy^2/4)) / (dx^2 + dy^2))
if (xor(small.arc, clock.wise)) t = -t
dcx = dx/2 + dy*t
dcy = dy/2 - dx*t
angle0 = my.angle(-dcx / radius, -dcy / radius)
angle1 = my.angle((dx - dcx) / radius, (dy - dcy) / radius)
if (!clock.wise) {
if (angle1 < angle0) angle1 = angle1 + 2*pi
angle = seq(angle0, angle1, length.out = n)
}
else {
if (angle0 < angle1) angle0 = angle0 + 2*pi
angle = seq(angle0, angle1, length.out = n)
}
cbind(x0 + dcx + radius * cos(angle), y0 + dcy + radius * sin(angle))
}
plot(my.arc(0, 1, 1, 0, small.arc = TRUE, clock.wise = TRUE)
draw.arc (in plotrix)
这个是根据圆心、半径和角度来画圆弧。
我自己写了一个画圆弧函数,
输入是两个端点,半径,自动计算出圆心,
还可以指定顺时针、逆时针,大弧还是小弧 -
my.angle <- function(x, y) {
if (y >= 0)
angle = acos(x)
else
angle = 2*pi - acos(x)
angle
}
my.arc <- function(p0, p1, radius,
small.arc = TRUE, clock.wise = FALSE, n = 35) {
x0 = p0[1]
x1 = p1[1]
y0 = p0[2]
y1 = p1[2]
dx = x1 - x0
dy = y1 - y0
t = sqrt((radius^2 - (dx^2/4 + dy^2/4)) / (dx^2 + dy^2))
if (xor(small.arc, clock.wise)) t = -t
dcx = dx/2 + dy*t
dcy = dy/2 - dx*t
angle0 = my.angle(-dcx / radius, -dcy / radius)
angle1 = my.angle((dx - dcx) / radius, (dy - dcy) / radius)
if (!clock.wise) {
if (angle1 < angle0) angle1 = angle1 + 2*pi
angle = seq(angle0, angle1, length.out = n)
}
else {
if (angle0 < angle1) angle0 = angle0 + 2*pi
angle = seq(angle0, angle1, length.out = n)
}
cbind(x0 + dcx + radius * cos(angle), y0 + dcy + radius * sin(angle))
}
plot(my.arc(0, 1, 1, 0, small.arc = TRUE, clock.wise = TRUE)