В базе R (и в sp
) я хочу создать стрелки с предопределенной формой, но гибким поворотом с центром в заданных координатах.Я придумал следующую функцию:
my_arrow <- function(x,y, rotate=0, col=par("fg"), cex=1) {
xbase <- c(1.2,0.2,0.2,-1.2, -1.2, 0.2, 0.2)
ybase <- c(0,1,0.5,0.5,-0.5,-0.5,-1)
rotM <- matrix(c(cos(rotate*pi/180), sin(rotate*pi/180), -sin(rotate*pi/180), cos(rotate*pi/180)), nrow=2)
transf <- function(x1,y1) cex * rotM %*% c(x1,y1) + c(x,y)
ans <- t(mapply(transf, xbase, ybase))
polygon(x=ans[,1], y=ans[,2], col=col)
}
Это создает стрелку, которую я хочу, если rotation=0
, однако она искажается, когда я поворачиваюсь.Например,
plot(1:2, type="p", col="white", xlim=c(-5,5), ylim=c(-10,10))
my_arrow(0,0, rotate=45)
создает диаграмму ниже.
Я думаю, что мне нужно применить некоторые специальные типы координат, но я застрял.Любые идеи?
(Функция arrows
не будет работать для меня, поскольку я имею в виду другую фигуру. Использование gridBase
и некоторые повернутые окна просмотра кажутся мне излишними.)
![enter image description here](https://i.stack.imgur.com/bC2pd.png)