Я работаю над проектом, и я подошел к столу. В настоящее время я создаю колесо стиля рулетки, которое будет вращаться, проблема, с которой я столкнулась, создает количество полигонов для колеса n. В конце концов, я хотел бы установить число n и использовать циклы for для создания точек полигонов. Я попытался использовать параметрическое уравнение этой определенной окружности, но значение y было неверным, поскольку пиксели обрабатываются по-разному. Вращение работает правильно с классом Rotateicon. Итак, простой вопрос: Как мне создать n 'количество полигонов из данного центра, прося x, y в конечном итоге с колесом?Создание рулеточного стиля Poly Wheel в Java
Кодекс
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Wheel extends JPanel {
private JLabel label;
private Icon icon;
private Icon rotated;
private int degrees;
private static Point center;
public Wheel(Image image)
{
setPreferredSize(new Dimension(250, 250));
center = new Point(250/2, 250/2);
icon = new ImageIcon(image);
label = new JLabel(icon);
label.setPreferredSize(label.getPreferredSize());
add(label);
setDegrees(0);
}
public void setDegrees(int degrees)
{
this.degrees = degrees;
double radians = Math.toRadians(degrees);
rotated = new RotatedIcon(icon, degrees);
label.setIcon(rotated);
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
Image bi = RotatableImage.getImage(250);
final Wheel r = new Wheel(bi);
final JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 360, 0);
slider.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent e)
{
int value = slider.getValue();
r.setDegrees(value);
}
});
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new JScrollPane(r));
f.add(slider, BorderLayout.SOUTH);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
});
}
static class RotatableImage
{
private static final Random r = new Random();
static public Image getImage(int size)
{
BufferedImage bi = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setPaint(Color.getHSBColor(r.nextFloat(), 1, 1));
g2d.setStroke(new BasicStroke(10.0f));
Polygon flag = new Polygon();
flag.addPoint(125, 125);
flag.addPoint(205, 250/2);
flag.addPoint(205, 250/2+10);
g2d.draw(flag);
g2d.setColor(Color.BLACK);
g2d.fillOval(120, 120, 10, 10);
g2d.dispose();
return bi;
}
}
}
При необходимости значок вращения: http://pastebin.com/Sbb38ifU
Что я получаю:
Я пытаюсь закончить с :
Это, скорее всего, поможет, если вы могли бы разместить изображения того, что вы хотите получить и то, что вы получаете взамен. – CandiedOrange
Как колесо фортуны: http://fc05.deviantart.net/fs71/i/2011/202/2/8/blank_wheel_template_by_larry4009-d416r88.png –
Я не вижу никаких овалов на этом изображении, поэтому я оставил недоумение, что означало 'g2d.fillOval()'. – CandiedOrange