Discussion:
[R] joining two points in rgl
Nair, Murlidharan T
2009-08-13 21:51:26 UTC
Permalink
Hi!!

I need to draw a cylinder/tube joining two points. I am trying to make something presentable, I have been able to do it using lines3d. But is it possible to
increase the thickness of the lines? The size parameter does not work. Does any one have any suggestions?

Thanks ../Murli

library(rgl)
pts<-structure(list(x = c(-0.975688, -0.975688), y = c(9.258795, -9.258795
), z = c(-1.8, 1.8)), .Names = c("x", "y", "z"), class = "data.frame", row.names = c(NA,
-2L))

plot3d(pts$x,pts$y,pts$z, col="grey", size=2, box=FALSE, axes=FALSE, type="s")
lines3d(pts$x,pts$y,pts$z, col="grey", size=2)
Duncan Murdoch
2009-08-14 00:24:11 UTC
Permalink
Nair, Murlidharan T wrote:
> Hi!!
>
> I need to draw a cylinder/tube joining two points. I am trying to make something presentable, I have been able to do it using lines3d. But is it possible to
> increase the thickness of the lines? The size parameter does not work. Does any one have any suggestions?
>
There's a new function cylinder3d (in rgl 0.85) that probably does
exactly what you want, but lwd is the parameter that controls line width.

Duncan Murdoch
> Thanks ../Murli
>
> library(rgl)
> pts<-structure(list(x = c(-0.975688, -0.975688), y = c(9.258795, -9.258795
> ), z = c(-1.8, 1.8)), .Names = c("x", "y", "z"), class = "data.frame", row.names = c(NA,
> -2L))
>
> plot3d(pts$x,pts$y,pts$z, col="grey", size=2, box=FALSE, axes=FALSE, type="s")
> lines3d(pts$x,pts$y,pts$z, col="grey", size=2)
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
Nair, Murlidharan T
2009-08-14 20:14:04 UTC
Permalink
Thanks, for lwd. I could not find rgl 0.85. The latest one I saw was 0.84. Can you tell me where I can download it from?
Also, is there a curve3d? I need to join two points in 3d smoothly.
Thanks ../Murli


-----Original Message-----
From: Duncan Murdoch [mailto:murdoch at stats.uwo.ca]
Sent: Thursday, August 13, 2009 8:24 PM
To: Nair, Murlidharan T
Cc: r-help at r-project.org
Subject: Re: [R] joining two points in rgl

Nair, Murlidharan T wrote:
> Hi!!
>
> I need to draw a cylinder/tube joining two points. I am trying to make something presentable, I have been able to do it using lines3d. But is it possible to
> increase the thickness of the lines? The size parameter does not work. Does any one have any suggestions?
>
There's a new function cylinder3d (in rgl 0.85) that probably does
exactly what you want, but lwd is the parameter that controls line width.

Duncan Murdoch
> Thanks ../Murli
>
> library(rgl)
> pts<-structure(list(x = c(-0.975688, -0.975688), y = c(9.258795, -9.258795
> ), z = c(-1.8, 1.8)), .Names = c("x", "y", "z"), class = "data.frame", row.names = c(NA,
> -2L))
>
> plot3d(pts$x,pts$y,pts$z, col="grey", size=2, box=FALSE, axes=FALSE, type="s")
> lines3d(pts$x,pts$y,pts$z, col="grey", size=2)
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
Nair, Murlidharan T
2009-08-19 19:51:25 UTC
Permalink
I tried the following

library(rgl)
pts<-structure(list(x = c(-0.975688, -0.975688), y = c(9.258795, -9.258795), z = c(-1.8, 1.8)), .Names = c("x", "y", "z"), class = "data.frame", row.names = c(NA, -2L))

plot3d(pts$x,pts$y,pts$z, col="grey", size=2, box=FALSE, axes=TRUE, type="s")
lines3d(pts$x,pts$y,pts$z, col="black", lwd=5)
x1<--0.975688
y1<-9.258795
z1<--1.8+0.2
x2<--0.975688
y2<--9.258795
z2<-1.8+0.2
text3d(x1,y1,z1,text=c("a"))
text3d(x2,y2,z2,text=c("t"))

cylinder3d(c(x1,y1,z1),c(x2,y2,z2))


1> I tried the above and could not get it to work. I did not understand how to give the Frenet coordinates. Can you give me some tip here please?

2> Is there a better way of writing the text than what I have done above? Can I make the spheres transparent so that if I write the text at the exact same coordinate of the sphere the text is above the sphere and can be seen?


Thanks ../Murli





-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Nair, Murlidharan T
Sent: Friday, August 14, 2009 4:14 PM
To: Duncan Murdoch
Cc: r-help at r-project.org
Subject: Re: [R] joining two points in rgl

>Thanks, for lwd. I could not find rgl 0.85. The latest one I saw was 0.84. Can you tell me where I can download it from?
>

It's on r-forge.r-project.org

>Also, is there a curve3d? I need to join two points in 3d smoothly.
>
No, though par3dinterp could probably be faked into doing that.

Duncan Murdoch




Thanks ../Murli


-----Original Message-----
From: Duncan Murdoch [mailto:murdoch at stats.uwo.ca]
Sent: Thursday, August 13, 2009 8:24 PM
To: Nair, Murlidharan T
Cc: r-help at r-project.org
Subject: Re: [R] joining two points in rgl

Nair, Murlidharan T wrote:
> Hi!!
>
> I need to draw a cylinder/tube joining two points. I am trying to make something presentable, I have been able to do it using lines3d. But is it possible to
> increase the thickness of the lines? The size parameter does not work. Does any one have any suggestions?
>
There's a new function cylinder3d (in rgl 0.85) that probably does
exactly what you want, but lwd is the parameter that controls line width.

Duncan Murdoch
> Thanks ../Murli
>
> library(rgl)
> pts<-structure(list(x = c(-0.975688, -0.975688), y = c(9.258795, -9.258795
> ), z = c(-1.8, 1.8)), .Names = c("x", "y", "z"), class = "data.frame", row.names = c(NA,
> -2L))
>
> plot3d(pts$x,pts$y,pts$z, col="grey", size=2, box=FALSE, axes=FALSE, type="s")
> lines3d(pts$x,pts$y,pts$z, col="grey", size=2)
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
Duncan Murdoch
2009-08-20 01:02:20 UTC
Permalink
On 19/08/2009 3:51 PM, Nair, Murlidharan T wrote:
> I tried the following
>
> library(rgl)
> pts<-structure(list(x = c(-0.975688, -0.975688), y = c(9.258795, -9.258795), z = c(-1.8, 1.8)), .Names = c("x", "y", "z"), class = "data.frame", row.names = c(NA, -2L))
>
> plot3d(pts$x,pts$y,pts$z, col="grey", size=2, box=FALSE, axes=TRUE, type="s")
> lines3d(pts$x,pts$y,pts$z, col="black", lwd=5)
> x1<--0.975688
> y1<-9.258795
> z1<--1.8+0.2
> x2<--0.975688
> y2<--9.258795
> z2<-1.8+0.2
> text3d(x1,y1,z1,text=c("a"))
> text3d(x2,y2,z2,text=c("t"))
>
> cylinder3d(c(x1,y1,z1),c(x2,y2,z2))

The first argument should be a matrix giving all the coordinates of the
centres.

>
>
> 1> I tried the above and could not get it to work. I did not understand how to give the Frenet coordinates. Can you give me some tip here please?

There was actually a typo in the handling of e2, but with that fixed,
this works:

plot3d(pts, col="grey", size=2, box=FALSE, axes=TRUE, type="s",
xlim=c(-5,5), ylim=c(-5,5), zlim=c(-5,5))
text3d(pts[1,],text=c("a"), adj = c(0.5, -1))
text3d(pts[2,],text=c("t"), adj = c(0.5, -1))
shade3d(cylinder3d(pts, radius=0.1, e2=rbind(c(1,0,0),c(1,0,0))), col="red")

It's not perfect, because it draws a cylinder with a circular cross
section, but the original plot has very uneven scaling. That's why I
added the xlim, ylim, and zlim: to get equal coordinates in all axes.

>
> 2> Is there a better way of writing the text than what I have done above? Can I make the spheres transparent so that if I write the text at the exact same coordinate of the sphere the text is above the sphere and can be seen?

You can use adj = c(0.5, -1) in the text3d calls to place the text above
the point, as I did above.

Duncan Murdoch


>
>
> Thanks ../Murli
>
>
>
>
>
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Nair, Murlidharan T
> Sent: Friday, August 14, 2009 4:14 PM
> To: Duncan Murdoch
> Cc: r-help at r-project.org
> Subject: Re: [R] joining two points in rgl
>
>> Thanks, for lwd. I could not find rgl 0.85. The latest one I saw was 0.84. Can you tell me where I can download it from?
>>
>
> It's on r-forge.r-project.org
>
>> Also, is there a curve3d? I need to join two points in 3d smoothly.
>>
> No, though par3dinterp could probably be faked into doing that.
>
> Duncan Murdoch
>
>
>
>
> Thanks ../Murli
>
>
> -----Original Message-----
> From: Duncan Murdoch [mailto:murdoch at stats.uwo.ca]
> Sent: Thursday, August 13, 2009 8:24 PM
> To: Nair, Murlidharan T
> Cc: r-help at r-project.org
> Subject: Re: [R] joining two points in rgl
>
> Nair, Murlidharan T wrote:
>> Hi!!
>>
>> I need to draw a cylinder/tube joining two points. I am trying to make something presentable, I have been able to do it using lines3d. But is it possible to
>> increase the thickness of the lines? The size parameter does not work. Does any one have any suggestions?
>>
> There's a new function cylinder3d (in rgl 0.85) that probably does
> exactly what you want, but lwd is the parameter that controls line width.
>
> Duncan Murdoch
>> Thanks ../Murli
>>
>> library(rgl)
>> pts<-structure(list(x = c(-0.975688, -0.975688), y = c(9.258795, -9.258795
>> ), z = c(-1.8, 1.8)), .Names = c("x", "y", "z"), class = "data.frame", row.names = c(NA,
>> -2L))
>>
>> plot3d(pts$x,pts$y,pts$z, col="grey", size=2, box=FALSE, axes=FALSE, type="s")
>> lines3d(pts$x,pts$y,pts$z, col="grey", size=2)
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
Nair, Murlidharan T
2009-08-20 14:12:06 UTC
Permalink
It gave me a the following error

Error in cylinder3d(pts, radius = 0.1, e2 = rbind(c(1, 0, 0), c(1, 0, :
subscript out of bounds

The code I used is below for completeness.

library(rgl)
pts<-structure(list(x = c(-0.975688, -0.975688), y = c(9.258795, -9.258795), z = c(-1.8, 1.8)), .Names = c("x", "y", "z"), class = "data.frame", row.names = c(NA, -2L))
plot3d(pts, col="grey", size=2, box=FALSE, axes=TRUE, type="s",
xlim=c(-5,5), ylim=c(-5,5), zlim=c(-5,5))
text3d(pts[1,],text=c("a"), adj = c(0.5, -1))
text3d(pts[2,],text=c("t"), adj = c(0.5, -1))
shade3d(cylinder3d(pts, radius=0.1, e2=rbind(c(1,0,0),c(1,0,0))), col="red")


Thanks for adj. The rgl package is absolutely wonderful. It is extremely useful to me.

Cheers../Murli

________________________________________
From: Duncan Murdoch [murdoch at stats.uwo.ca]
Sent: Wednesday, August 19, 2009 9:02 PM
To: Nair, Murlidharan T
Cc: r-help at r-project.org
Subject: Re: [R] joining two points in rgl

On 19/08/2009 3:51 PM, Nair, Murlidharan T wrote:
> I tried the following
>
> library(rgl)
> pts<-structure(list(x = c(-0.975688, -0.975688), y = c(9.258795, -9.258795), z = c(-1.8, 1.8)), .Names = c("x", "y", "z"), class = "data.frame", row.names = c(NA, -2L))
>
> plot3d(pts$x,pts$y,pts$z, col="grey", size=2, box=FALSE, axes=TRUE, type="s")
> lines3d(pts$x,pts$y,pts$z, col="black", lwd=5)
> x1<--0.975688
> y1<-9.258795
> z1<--1.8+0.2
> x2<--0.975688
> y2<--9.258795
> z2<-1.8+0.2
> text3d(x1,y1,z1,text=c("a"))
> text3d(x2,y2,z2,text=c("t"))
>
> cylinder3d(c(x1,y1,z1),c(x2,y2,z2))

The first argument should be a matrix giving all the coordinates of the
centres.

>
>
> 1> I tried the above and could not get it to work. I did not understand how to give the Frenet coordinates. Can you give me some tip here please?

There was actually a typo in the handling of e2, but with that fixed,
this works:

plot3d(pts, col="grey", size=2, box=FALSE, axes=TRUE, type="s",
xlim=c(-5,5), ylim=c(-5,5), zlim=c(-5,5))
text3d(pts[1,],text=c("a"), adj = c(0.5, -1))
text3d(pts[2,],text=c("t"), adj = c(0.5, -1))
shade3d(cylinder3d(pts, radius=0.1, e2=rbind(c(1,0,0),c(1,0,0))), col="red")

It's not perfect, because it draws a cylinder with a circular cross
section, but the original plot has very uneven scaling. That's why I
added the xlim, ylim, and zlim: to get equal coordinates in all axes.

>
> 2> Is there a better way of writing the text than what I have done above? Can I make the spheres transparent so that if I write the text at the exact same coordinate of the sphere the text is above the sphere and can be seen?

You can use adj = c(0.5, -1) in the text3d calls to place the text above
the point, as I did above.

Duncan Murdoch


>
>
> Thanks ../Murli
>
>
>
>
>
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Nair, Murlidharan T
> Sent: Friday, August 14, 2009 4:14 PM
> To: Duncan Murdoch
> Cc: r-help at r-project.org
> Subject: Re: [R] joining two points in rgl
>
>> Thanks, for lwd. I could not find rgl 0.85. The latest one I saw was 0.84. Can you tell me where I can download it from?
>>
>
> It's on r-forge.r-project.org
>
>> Also, is there a curve3d? I need to join two points in 3d smoothly.
>>
> No, though par3dinterp could probably be faked into doing that.
>
> Duncan Murdoch
>
>
>
>
> Thanks ../Murli
>
>
> -----Original Message-----
> From: Duncan Murdoch [mailto:murdoch at stats.uwo.ca]
> Sent: Thursday, August 13, 2009 8:24 PM
> To: Nair, Murlidharan T
> Cc: r-help at r-project.org
> Subject: Re: [R] joining two points in rgl
>
> Nair, Murlidharan T wrote:
>> Hi!!
>>
>> I need to draw a cylinder/tube joining two points. I am trying to make something presentable, I have been able to do it using lines3d. But is it possible to
>> increase the thickness of the lines? The size parameter does not work. Does any one have any suggestions?
>>
> There's a new function cylinder3d (in rgl 0.85) that probably does
> exactly what you want, but lwd is the parameter that controls line width.
>
> Duncan Murdoch
>> Thanks ../Murli
>>
>> library(rgl)
>> pts<-structure(list(x = c(-0.975688, -0.975688), y = c(9.258795, -9.258795
>> ), z = c(-1.8, 1.8)), .Names = c("x", "y", "z"), class = "data.frame", row.names = c(NA,
>> -2L))
>>
>> plot3d(pts$x,pts$y,pts$z, col="grey", size=2, box=FALSE, axes=FALSE, type="s")
>> lines3d(pts$x,pts$y,pts$z, col="grey", size=2)
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
Loading...