[java]扇形っぽいのを描く
2009/12/28
2009/12/31
java
グラフィック
Javaです。ふと扇形っぽいのを描きたくなりました。
java.awt.geom.GeneralPathを使用してます。
あとArc2Dを使っています。パスを閉じる場合に起点と終点を意識しないといけないので、この辺で頭をひねりました。。。
package ggg;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Arc2D;
import java.awt.geom.GeneralPath;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestA1 {
/**
* 中心座標から、指定された半径の円を描くx, y, w, hを求める。
*/
static Rectangle a(int cx, int cy, int r) {
int x = cx - r;
int y = cy - r;
int w = r + r;
int h = r + r;
return new Rectangle(x, y, w, h);
}
static GeneralPath b(int r, int degree) {
// Rectangle rec1 = a(0 + r, 0 + r, r);
Rectangle rec2 = a(0 + r, 0 + r, (int) (r * 0.5));
int x = 0, y = 0, w = r + r, h = w;
int x2 = rec2.x, y2 = rec2.y;
int w2 = rec2.width, h2 = rec2.height;
Arc2D.Double arc1 = new Arc2D.Double(x, y, w, h, 0, degree, Arc2D.OPEN);
Arc2D.Double arc2 = new Arc2D.Double(x2, y2, w2, h2, degree, degree
* -1, Arc2D.OPEN);
GeneralPath path = new GeneralPath();
path.append(arc1, true);
path.lineTo(arc2.getStartPoint().getX(), arc2.getStartPoint().getY());
path.append(arc2, true);
path.lineTo(arc1.getStartPoint().getX(), arc1.getStartPoint().getY());
return path;
}
static class MyFrame extends JFrame {
{
getContentPane().add(new JPanel() {
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
GeneralPath path = b(/* 半径 */100, /* 角度 */120);
g2d.fill(path);
g2d.setColor(Color.RED);
g2d.draw(path);
}
});
}
}
public static void main(String[] args) {
MyFrame frame = new MyFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 400);
frame.setLocation(300, 700);
frame.setVisible(true);
}
}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Arc2D;
import java.awt.geom.GeneralPath;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestA1 {
/**
* 中心座標から、指定された半径の円を描くx, y, w, hを求める。
*/
static Rectangle a(int cx, int cy, int r) {
int x = cx - r;
int y = cy - r;
int w = r + r;
int h = r + r;
return new Rectangle(x, y, w, h);
}
static GeneralPath b(int r, int degree) {
// Rectangle rec1 = a(0 + r, 0 + r, r);
Rectangle rec2 = a(0 + r, 0 + r, (int) (r * 0.5));
int x = 0, y = 0, w = r + r, h = w;
int x2 = rec2.x, y2 = rec2.y;
int w2 = rec2.width, h2 = rec2.height;
Arc2D.Double arc1 = new Arc2D.Double(x, y, w, h, 0, degree, Arc2D.OPEN);
Arc2D.Double arc2 = new Arc2D.Double(x2, y2, w2, h2, degree, degree
* -1, Arc2D.OPEN);
GeneralPath path = new GeneralPath();
path.append(arc1, true);
path.lineTo(arc2.getStartPoint().getX(), arc2.getStartPoint().getY());
path.append(arc2, true);
path.lineTo(arc1.getStartPoint().getX(), arc1.getStartPoint().getY());
return path;
}
static class MyFrame extends JFrame {
{
getContentPane().add(new JPanel() {
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
GeneralPath path = b(/* 半径 */100, /* 角度 */120);
g2d.fill(path);
g2d.setColor(Color.RED);
g2d.draw(path);
}
});
}
}
public static void main(String[] args) {
MyFrame frame = new MyFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 400);
frame.setLocation(300, 700);
frame.setVisible(true);
}
}
: