Click here to Skip to main content
15,880,608 members
Articles / Programming Languages / C#
Article

Spherical Coordinates in C#

Rate me:
Please Sign up or sign in to vote.
4.72/5 (20 votes)
27 Mar 20073 min read 128.2K   3.7K   78   12
This article shows how to create spherical graphics objects

Introduction

Normally, the Cartesian coordinate system is used in transformations and projections for graphics objects. In this case, you simply specify a point using X, Y, and Z coordinates. In practice, other coordinate systems can also be applied, and are sometimes more convenient than the Cartesian coordinate system.

In this article, I will discuss the spherical coordinate system in 3D space and show you how to create the spherical graphics objects in this system.

Background

In the spherical coordinate system, a point is specified by r, θ, and φ. Here r is the distance from the point to the origin, θ is the polar angle, and φ is the azimuthal angle in the X-Z plane from the X axis. In this notation, I alternate the conventional Y and Z axes so that the computer screen is described by the X-Y plane. Figure 1 shows a point in this spherical coordinate system

Figure 1: Spherical coordinate system.

From this figure, we can obtain the following relationships:

The spherical coordinates (r, θ, φ) are related to the Cartesian coordinates by:

Sometimes it is more convenient to create sphere-like objects in terms of the spherical coordinate system. The following example application program will create two spheres. We need to add the Matrix3 and Point3 classes to the current project. And also add a new class, DrawSphere, to the project.

Now we need to add a Spherical method to the Matrix3 class. The Matrix3 class has been discussed in Chapter 5 of my new book "Practical C# Charts and Graphics".

C#
public Point3 Spherical(float r, float theta, float phi) 
{
    Point3 pt = new Point3();
    float snt = (float)Math.Sin(theta * Math.PI / 180); 
    float cnt = (float)Math.Cos(theta * Math.PI / 180); 
    float snp = (float)Math.Sin(phi * Math.PI / 180); 
    float cnp = (float)Math.Cos(phi * Math.PI / 180); 
    pt.X = r * snt * cnp; 
    pt.Y = r * cnt; 
    pt.Z = -r * snt * snp; 
    pt.W = 1; 
    return pt; 
} 

This method transforms a point in the spherical coordinate system to a point in the Cartesian coordinate system. We then Add a DrawSphere class to the project. This class allows you to specify the radius and positions (the center location) of a sphere object. The SphereCoordinates method in this class creates the points on a sphere surface by specifying their longitude and latitude. The DrawIsometricView draws the sphere using the isometric projection.

Using the code

This application can be tested using the following Form1 class:
C#
using System;
using System.Drawing;
using System.Drawing.Drawing2D; 
using System.Windows.Forms; 

namespace Example5_6 
{ 
    public partial class Form1 : Form
    { 
      public Form1() 
      { 
            InitializeComponent(); 
            this.SetStyle(ControlStyles.ResizeRedraw, true); 
            // Subscribing to a paint eventhandler to drawingPanel:
            panel1.Paint += new PaintEventHandler(panel1Paint); 
      } 

      private void panel1Paint(object sender, PaintEventArgs e) 
      { 
            Graphics g = e.Graphics; 
            g.SmoothingMode = SmoothingMode.AntiAlias; 
            float a = panel1.Height / 3; 
            DrawSphere ds = new DrawSphere(this, a, 0, 0, -a / 2); 
            ds.DrawIsometricView(g); 
            ds = new DrawSphere(this, 2 * a / 3, -a/2, -a/2, a / 2); 
            ds.DrawIsometricView(g); 
      } 
    } 
} 

Here we create two spheres with different radii and positions. By building and running this project, you should obtain the results shown in Figure 2.

Figure 2: Spheres created in a spherical coordinate system.

This project is from the examples (example5-6 in Chapter 5) of the new book "Practical C# Charts and Graphics", where you can find more advanced chart and graphics programming for real-world .NET applications. For more information, please visit the website at www.publishing.unicadinc.com

About the Author

Dr. Jack Xu has a Ph.D in theoretical physics. He has over 15 years programming experience in Basic, Fortran, C, C++, Matlab, and C#, specializing in numerical computation methods, algorithms, physical modeling, computer-aided design (CAD) development, graphics user interface, and 3D graphics. Currently, he is responsible for developing commercial CAD tools based on Microsoft .NET framework.

Please read my other articles:

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionDrawSphere Pin
emad_awad18-Mar-12 12:42
emad_awad18-Mar-12 12:42 
the code provided has only DrawCube code, but DrawSphere is not provided. Are you able to attach that too ?
Best Regards
AnswerRe: DrawSphere Pin
Alaric_24-Apr-12 7:39
professionalAlaric_24-Apr-12 7:39 
GeneralRe: DrawSphere Pin
John Demetriou8-Oct-17 22:02
John Demetriou8-Oct-17 22:02 
AnswerRe: DrawSphere Pin
Member 1208224530-Nov-15 15:45
Member 1208224530-Nov-15 15:45 
GeneralMy vote of 5 Pin
Manoj Kumar Choubey18-Feb-12 3:23
professionalManoj Kumar Choubey18-Feb-12 3:23 
GeneralMy vote of 1 Pin
victorbos29-Sep-09 13:17
victorbos29-Sep-09 13:17 
QuestionCube? Pin
Darchangel7-Aug-07 3:46
Darchangel7-Aug-07 3:46 
AnswerRe: Cube? Pin
Albin Abel15-Mar-11 4:15
Albin Abel15-Mar-11 4:15 
QuestionHow do you draw a 3d pyramid and funnel/Cone Pin
Patrick Blackman27-Mar-07 16:44
professionalPatrick Blackman27-Mar-07 16:44 
AnswerRe: How do you draw a 3d pyramid and funnel/Cone [modified] Pin
Jack J. H. Xu28-Mar-07 5:36
Jack J. H. Xu28-Mar-07 5:36 
GeneralRe: How do you draw a 3d pyramid and funnel/Cone Pin
Patrick Blackman28-Mar-07 14:00
professionalPatrick Blackman28-Mar-07 14:00 
GeneralRe: How do you draw a 3d pyramid and funnel/Cone Pin
Jack J. H. Xu29-Mar-07 9:37
Jack J. H. Xu29-Mar-07 9:37 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.