0
|
11719 Views
|
9 Replies
|
0 Total Likes
View groups...
Share

# Rotate the coordinate system

Posted 8 years ago
 Hello everybody I like to plot following graphic: Basically I have two coordinate systems. Coordinate system "A" which is not tilted and a coordinate system "B" which is rotated at the origin by an angle alpha. In coordinate system "B" I plot the cos-function which seems rotated when looking from coordinate system A. The gray shaded area which you can see in the picture is not important. How can I plot this? I have no idea :-(. I already tried it with the Mathematica-function Rotate. Hope you can help me to solve this problem. Thank you very much.
9 Replies
Sort By:
Posted 8 years ago
 Great, thank you guys for your help. I really appreciate it. Best regards,Peter
Posted 8 years ago
 Hi Peter,I think the resolution in both images is the same, but the rotated image contains necessarily more pixels: In:= ImageDimensions /@ {img0, img1} (* Out= {{500, 300}, {547, 392}} *) But as a matter of fact Ottos solution is much more elegant! One just has to make sure that in both plots the same options are used: pArgs = Sequence[{x, -2*\[Pi], 2*\[Pi]}, PlotRange -> {-3, 3}, ImageSize -> 500]; Plot[x, Evaluate @ pArgs, PlotStyle -> {Opacity}, Epilog -> Inset[Rotate[Plot[Cos[x], Evaluate @ pArgs], -10 Degree]]] Regards -- Henrik
Posted 8 years ago
 Hello Thank you Henrik for your answer. Now it is perfectly working. I am wondering why the resolution of the tilted coordinate system is much lower than the other one. Should't Mathematica be able to rotate an image without decreasing the resolution? Maybe this is the advantage of Ottos solution.Regards,Peter
Posted 8 years ago
 Hi Henrik and OttoThank you very much. I like both of your solutions. @Henrik: If I copy-paste your code I get following error message: The number of channels must be equal or one of them must be a single-channel image and the other a multichannel image.The problem is related to the last function ImageMultiply. Any ideas what this means and how I can fix that? I am using Mathematica 10.0.@Otto: I would like to increase the size of the inset but for some reason this doesn't work. I want both coordinate systems with similar frame size (like in Henriks solution). At the moment the inset is much too small for my taste :-)I tried several options but I failed.  Plot[0, {x, -6, 6}, PlotRange -> {{-2, 2}, {-2, 2}}, Frame -> True, PlotStyle -> Black, ImageSize -> 800, Epilog -> Inset[Rotate[Plot[Cos[x], {x, -2*\[Pi], 2*\[Pi]}], 30 Degree], {0, 0}, {0, 0}, 15] ] Thank you very much for your help,Peter
Posted 8 years ago
 Hi Peter,sorry for this issue! I still do not fully understand how this could have happened - obviously there was a change from version 9.0 (where I developed my first "solution") to version 10.2 (where I can now verify the problem). Anyway, here is the code which should run for version 10.2; it is even somewhat simpler: img0 = Plot[0, {x, -10, 10}, PlotRange -> {{-10, 10}, {-5, 5}}, ImageSize -> 500]; img1 = ImageRotate[ Plot[3 + Sin[x], {x, -10, 10}, PlotRange -> {-5, 5}, PlotStyle -> Green, ImageSize -> 500], -10 \[Degree]]; ImageCompose[img0, img1, {251, 150}] Regards -- Henrik
Posted 8 years ago
 Hello Peter,This will display the rotated plot: Rotate[Plot[Cos[x], {x, -2*\[Pi], 2*\[Pi]}], 30 Degree] However, you only get the rotated axes, not the straight ones. You can put it inside another plot, just to get straight axes: Plot[0, {x, 0, 1}, PlotRange -> {{-2*\[Pi], 2*\[Pi]}, {-3, 3}}, Epilog -> Inset[Rotate[Plot[Cos[x], {x, -2*\[Pi], 2*\[Pi]}], 30 Degree]]] You can play with the ranges and the size of the Inset to get things right. I cannot say I like the idea of using an additional call to Plot just to generate axes, but I am not being able to display the output of Rotate with Graphics, even if I first evaluate FullGraphics on it. If you could display it with Graphics, then you could display the straight axes and even a frame, if desired.You may want to see:http://mathematica.stackexchange.com/questions/80505/how-to-plot-functions-in-multiple-coordinate-systemsandhttp://mathematica.stackexchange.com/questions/1003/is-there-an-equivalent-of-fullgraphics-for-graphics3dOL.
Posted 8 years ago
 Hi Peter,here comes a crude approach, but maybe this goes in the right direction: img0 = Image@ RotateLeft[ (* RotateLeft is for fine tuning ... *) ImageData@ ColorConvert[ Plot[0, {x, -10, 10}, PlotRange -> {{-10, 10}, {-4, 4}}, ImageSize -> 500], "Grayscale"], {0, 2}]; img1 = ImageRotate[ Plot[3 + Sin[x], {x, -10, 10}, PlotRange -> {-4, 4}, PlotStyle -> Green, ImageSize -> 500], -10 \[Degree], Background -> White]; ImageMultiply[img1, img0] which gives: Regards -- Henrik
Posted 8 years ago
 Hithank you Otto for your answer. This is only partially what I am looking for. The code that you gave me shows a cos-function rotated by an angle. Now I would like to have a second coordinate system on top of this plot which is rotated by the same angle. Just like in the picture I included in my first post. That is the big challenge for me. Best regards,Peter
Posted 8 years ago
 Hello Peter,Not sure whether this is what you are looking for. At least I hope it will provide a starting point: ParametricPlot[ Evaluate[Dot[RotationMatrix[\[Pi]/12], {x, Cos[x]}]], {x, -2*\[Pi], 2*\[Pi]}] Not sure how to paste the image but it looks like a rotated cosine graph. Notice that the default AspectRatio for ParametricPlot is Automatic, meaning the horizontal and vertical scales are equal. This is different than the default value in Plot. This may become important if you want to display them together.OL.