• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1169
  • Last Modified:

Polar coordinates drawing

Hi,

Still trying to get a part of a programme working following up this question http://www.experts-exchange.com/Other/Math_Science/Q_23447301.html.

I'm having a problem seperating the circle into segments.  I'm wanting to draw a line every 3.6 degrees.  Or even better draw from 0 on left to 100 on right (image 1) with appropriate 100 segment degrees inbetween.

My problem is that when I set theta to different values in my code (attached) I get different angles drawn!

Code at the moment draws all the lines on top of each other as this was how I noticed that it was drawing the lines at the correct degree segments!

Any suggestions on whats going on here? Or perhaps how once overcome this problem how I can start to work out my desired result!

p.s. Sorry if in wrong area!

Thanks
James
int iCurrentRowStart = 0;
        for (int x = 0; x < m_data.header.iNeuron; x++) {
            for (int y = iCurrentRowStart; y < m_data.header.iNeuron; y++) {
                if (x != y) {
                    double iIncrease = 3.6; //360 / m_data.header.iWin;
                    for (int i = 0; i < m_data.header.iWin; i++) {
                        double dTheta = 180; //(iIncrease * i) + 8;
                        // work out beggning of line on outside of inner circle
                        double xPos1 = m_pStartX + (m_iMiddle * Math.cos(dTheta));
                        double yPos1 = m_pStartY + (m_iMiddle * Math.sin(dTheta));
                        // work out end of line on outside of outer circle
                        double xPos2 = xPos1 + ((m_data.afNorm[x][y][i]*m_iScale)) * Math.cos(dTheta);
                        double yPos2 = yPos1 + ((m_data.afNorm[x][y][i]*m_iScale)) * Math.sin(dTheta);
                        
                        if (m_data.afNorm[x][y][i] == m_data.afPeaks[x][y]) {
                            if (i >= 50){
                                gIn.setColor(Color.RED);
                            } else {
                                gIn.setColor(Color.BLUE);
                            }
                        } else {
                            gIn.setColor(Color.BLACK);
                        }
                        gIn.draw(new Line2D.Double(xPos1, yPos1, xPos2, yPos2));
                    }
                }
            }
            iCurrentRowStart++;
        }

Open in new window

desired.jpg
0.jpg
90.jpg
180.jpg
0
James_h1023
Asked:
James_h1023
  • 4
  • 4
2 Solutions
 
anmalaverCommented:
Hi

Math.cos uses radians instead of degrees...
Multiply by 0.01745329251994 to convert.
0
 
James_h1023Author Commented:
Thanks for quick reply.

So simple!  How annoying.

It is very important that these are very accurate so they can be exactly on top of each other.  Would it be possible to do what i'm wanting in radians or is the above going to be accurate?

Radians are a bit rusty for me - 2(pie) in a circle, so I could divide that by 100 still!?
0
 
anmalaverCommented:
Calc an increment to the angle in radians

increment = (3 * pi / 2) steps;
and do the loop from -pi/2 to pi+pi/4
0
Cloud Class® Course: Microsoft Windows 7 Basic

This introductory course to Windows 7 environment will teach you about working with the Windows operating system. You will learn about basic functions including start menu; the desktop; managing files, folders, and libraries.

 
James_h1023Author Commented:
Sorry not quite with you ... whats steps?
And the loop bit, are you meaning the line in my code:
double dTheta = .....
0
 
anmalaverCommented:
Steps means the number of subdivisions you want; 100 in this case.
0
 
anmalaverCommented:
Theta will be in the loop from -pi/2 to pi+pi/4
0
 
James_h1023Author Commented:
Ah cool.
Got it - Thanks very much for quick replies :)

James
0
 
Infinity08Commented:
Did you get this working ? Because the accepted replies are not very accurate.

The lower limit should be -PI/4 and not -PI/2.
The step size should be calculated by dividing by the number of steps (100), not multiplying.
The step size should be negative because you're going clockwise.
0
 
James_h1023Author Commented:
Yeh, I resorted to the multiple by pi/180 although figured out the others with some common sense and tweaking :)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

  • 4
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now