- ベストアンサー
Javaプログラム
Java言語で円を描きそのライン上に頂点をいくつか表示させるプログラムを作りたいのですが全くわかりません。 参考書を何冊か見たのですが載っていませんでした。 よろしければ教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
コンピュータの画面はご存じのようにかなり粗い離散物ですから、幾何学的なグラフィクスは微調整と妥協とあきらめが必要です。以下は、短時間でざっと書いたプログラムなので、微調整の部分が不十分です。epsの値や、cx, cyの値をforループの中で個別に変える、などの微調整をトライしてください。 ------------------------------------------------------- import javax.swing.*; import java.awt.*; import java.awt.geom.*; public class Shin97PanelDouble extends JPanel{ double cr, dr, nd, rx, ry, cwidth, cheight, dwidth, dheight; double eps; int margin; public Shin97PanelDouble (double radius, double drad, int numOfDots, double x, double y){ cr = radius; dr = drad; nd = numOfDots; rx = x; ry = y; cwidth = cheight = cr * 2; dwidth = dheight = dr * 2; eps = 1.0 * (((cwidth / 100) + (cheight / 100)) / 2.0); margin = 10; setPreferredSize(new Dimension ((int)(rx * 2 + cwidth + dwidth) + margin, (int)(ry * 2 + cheight + dheight) + margin)); rx = rx + ((double)margin) / 2.0; ry = ry + ((double)margin) / 2.0; } public void paintComponent(Graphics g){ double cx, cy, dx, dy; Graphics2D g2 = (Graphics2D)g; Ellipse2D.Double circle = new Ellipse2D.Double(rx, ry, cwidth, cheight); g2.draw(circle); cx = rx + (cwidth - eps) / 2; cy = ry + (cheight - eps) / 2; for (int i = 0; i < nd; ++i){ dx = cx + cr * Math.cos(Math.toRadians(i * 360.0 / nd)); dy = cy + cr * Math.sin(Math.toRadians(i * 360.0 / nd)); Ellipse2D.Double dot = new Ellipse2D.Double(dx, dy, dwidth, dheight); g2.fill(dot); } } /* main() for test */ public static void main(String[] args){ JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add (new Shin97PanelDouble(400, 5, 10, 0, 0), BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } } ----------------------------------------------------
その他の回答 (1)
- _ranco_
- ベストアンサー率58% (126/214)
円は分かりますが、「頂点」って何ですか?
補足
円を描きまして、描いた円のライン上に点を等間隔で描きたいんです。 難しいかもしれませんが、観覧車みたいな形です。 ゴンドラを頂点と想像してみて下さい。
お礼
ありがとうございます。参考にして、良いものを作ります。