## Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

• Help others & share knowledge
• Earn cash & points
Solved

# How can I use drawPolygon with decimal numbers?

Posted on 2003-10-29
299 Views
I am very new to this object oriented type programming, most of what I have done is in PERL, so forgive my ignorance.

I am using drawPolygon just fine with whole numbers. I need to introduce numbers with decimals in to the routine. How would I go about this? I've tried changing the int to double and float, but keep getting errors during the compile.
Thanks
-Dale
0
Question by:dalehanzelka
• 3

LVL 15

Expert Comment

ID: 9646728
You just need to cast your doubles (or floats) before passing them into the method.  Unfortunately, I don't *think* there's a way to simply cast an array of doubles to an array of ints, like this:

double[] myDoubles = {1.1, 2.2, 3.3};
int[] myInts = (int[])myDoubles;

In this case, you would need to do:

int[] myInts = new int[myDoubles.length];
for (int i = 0; i < myDoubles.length; i++)
{
myInts[i] = (int)myDoubles[i];
}

For the last parameter, I'm guessing that your number of points is already an int ;-)
0

LVL 4

Accepted Solution

delphi3 earned 250 total points
ID: 9651080
Hi dalehanzelka,

If this is of any help in using decimals to draw geometric shapes??

Here is an application that draws a 2 figures with some decimals in one of them that I happen
to have in my files.

And it is not pure OOP  but has some math with it.

Delphi3

package applicationpolygontest;

import java.awt.*;
import javax.swing.*;

public class polygonApplic {
public polygonApplic() {
}

public static void main(String[] args) {
polygonApplic polygonApplic1 = new polygonApplic();
PolygonFrame frame = new PolygonFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}

/**
A frame with a message panel
*/
class PolygonFrame
extends JFrame {
public PolygonFrame() {
setTitle("Polygon Test");
setSize(WIDTH, HEIGHT);
PolygonPanel panel = new PolygonPanel();
Container contentPane = getContentPane();
}

public static final int WIDTH = 200;
public static final int HEIGHT = 300;
}

/**
A panel that shows  polygons
*/
class PolygonPanel
extends JPanel {

public void paint(Graphics g) {
// a triangle
int factor = 12; // an enlargement factor
int[] TriPts = {
1 * factor, 1 * factor, 3 * factor, 4 * factor, 2 * factor, 6 * factor};
g.setColor(Color.red);

g.drawLine(TriPts[0], TriPts[1], TriPts[2], TriPts[3]);
g.drawLine(TriPts[2], TriPts[3], TriPts[4], TriPts[5]);
g.drawLine(TriPts[4], TriPts[5], TriPts[0], TriPts[1]);

// a pentagon
int PentaPts = 6;
int PentaPtsX[] = new int[PentaPts];
// since it is a circular motion here calling an extra to close up the figure
int PentaPtsY[] = new int[PentaPts];
g.setColor(Color.blue);
int rad = 50; // an enlargement factor
int x1, y1, x2, y2;
for (int i = 0; i < PentaPts; i++) {
System.out.println(i + ". " + "Cos X = " +
rad * Math.cos(2 * Math.PI / 5 * i));
System.out.println(i + ". " + "Sine Y = " +
rad * Math.sin(2 * Math.PI / 5 * i));

x1 = (int) (rad * Math.cos(2 * Math.PI / 5 * i));
y1 = (int) (rad * Math.sin(2 * Math.PI / 5 * i));
PentaPtsX[i] = x1;
PentaPtsY[i] = y1;
}
System.out.println(" ");
// Translate to center at 100,150;
for (int ic = 0; ic < PentaPts - 1; ic++) {
if (ic == 0) {
g.setColor(Color.red);
}
if (ic == 1) {
g.setColor(Color.blue);
}
if (ic == 2) {
g.setColor(Color.green);
}
if (ic == 3) {
g.setColor(Color.ORANGE);
}
if (ic == 4) {
g.setColor(Color.MAGENTA);
}
g.drawLine(100 + PentaPtsX[ic], 150 + PentaPtsY[ic],
100 + PentaPtsX[ic + 1], 150 + PentaPtsY[ic + 1]);
}
g.setColor(Color.CYAN);
g.drawOval(50, 100, 100, 100);
}
}
0

Author Comment

ID: 9673305
I found that using the graphics2D g2, I could accomplish what I needed, but your suggestion did work also.

Thanks,
-Dale
0

LVL 4

Expert Comment

ID: 9673540

Delphi3
0

LVL 4

Expert Comment

ID: 9674270
dalehanzelka,

Thanks for the points and grade.

Delphi3
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question