Страница 1 из 1
Карта эллипсов дисперсии по мат. ожиданию, осям и углу
Добавлено: 21 окт 2015, 05:50
nickleb
Здравствуйте. Кто-нибудь имел опыт в
R рисования
карты эллипсов дисперсии по
мат. ожиданию, осям и углу между его главной осью и мат. ожиданием? Примерно как:
www.pmel.noaa.gov/maillists/tmap/ferret ... 00315.html
Re: Карта эллипсов дисперсии по мат. ожиданию, осям и углом
Добавлено: 21 окт 2015, 05:52
Denis Rykov
403
Re: Карта эллипсов дисперсии по мат. ожиданию, осям и углом
Добавлено: 21 окт 2015, 05:55
nickleb
Denis Rykov писал(а):403
Denis, исправил ссылку...
Re: Карта эллипсов дисперсии по мат. ожиданию, осям и углом
Добавлено: 21 окт 2015, 06:44
Максим Дубинин
nickleb писал(а):исправил ссылку
нет
Re: Карта эллипсов дисперсии по мат. ожиданию, осям и углом
Добавлено: 21 окт 2015, 06:54
nickleb
Максим Дубинин писал(а):nickleb писал(а):исправил ссылку
нет
извините... вот так сейчас: и здесь, и в первом сообщении темы:
www.pmel.noaa.gov/maillists/tmap/ferret ... 00315.html
Re: Карта эллипсов дисперсии по мат. ожиданию, осям и углом
Добавлено: 21 окт 2015, 17:25
gamm
Код: Выделить всё
my.ellipse<-function(x0,y0,a,b,ell.angle,ell.segm=48,print=TRUE) {
# horisonl ellipse
xy<-matrix(ncol=2,nrow=ell.segm+1)
for(i in 1:ell.segm) {
ang<-2*pi/ell.segm
x<-cos((i-1)*ang)*a
y<-sin((i-1)*ang)*b
xy[i,]<-c(x,y)
}
xy[ell.segm+1,]<-xy[1,]
# turn ellipse
ell.sin<-sin(ell.angle/180*pi)
ell.cos<-cos(ell.angle/180*pi)
mtr<-matrix(c(ell.cos,ell.sin,-ell.sin,ell.cos),ncol=2,nrow=2)
xy1<-t((mtr %*% t(xy)) + c(x0,y0))
if(print) points(xy1,type="l",lwd=3)
invisible(xy1)
}
pos<-expand.grid(1:10*10,1:5*10)
plot(0,0,xlim=c(0,105),ylim=c(0,55),asp=1,type="n")
for(i in 1:nrow(pos)) {
x0<-pos[i,1] # center position
y0<-pos[i,2] # center position
a<-runif(1,0.1,5) # "main" semiaxis
b<-runif(1,0.1,5) # "secondary" semiaxis
ang<-runif(1,0,360) # angle
my.ellipse(x0,y0,a,b,ang,ell.segm=48,print=TRUE)
}
главная полуось горизонтальна, поворот - против часовой от горизонтали.
Re: Карта эллипсов дисперсии по мат. ожиданию, осям и углом
Добавлено: 21 окт 2015, 18:04
nickleb
gamm писал(а):Код: Выделить всё
my.ellipse<-function(x0,y0,a,b,ell.angle,ell.segm=48,print=TRUE) {
# horisonl ellipse
xy<-matrix(ncol=2,nrow=ell.segm+1)
for(i in 1:ell.segm) {
ang<-2*pi/ell.segm
x<-cos((i-1)*ang)*a
y<-sin((i-1)*ang)*b
xy[i,]<-c(x,y)
}
xy[ell.segm+1,]<-xy[1,]
# turn ellipse
ell.sin<-sin(ell.angle/180*pi)
ell.cos<-cos(ell.angle/180*pi)
mtr<-matrix(c(ell.cos,ell.sin,-ell.sin,ell.cos),ncol=2,nrow=2)
xy1<-t((mtr %*% t(xy)) + c(x0,y0))
if(print) points(xy1,type="l",lwd=3)
invisible(xy1)
}
pos<-expand.grid(1:10*10,1:5*10)
plot(0,0,xlim=c(0,105),ylim=c(0,55),asp=1,type="n")
for(i in 1:nrow(pos)) {
x0<-pos[i,1] # center position
y0<-pos[i,2] # center position
a<-runif(1,0.1,5) # "main" semiaxis
b<-runif(1,0.1,5) # "secondary" semiaxis
ang<-runif(1,0,360) # angle
my.ellipse(x0,y0,a,b,ang,ell.segm=48,print=TRUE)
}
главная полуось горизонтальна, поворот - против часовой от горизонтали.
Ваш пример сработал,
gamm. Спасибо! Буду пробовать адаптировать для себя.