تدوير الشكل عموديًا حول المحور السيني
يوضح الكود المقدم كيفية تدوير المضلع، لكنه لا يدور حوله المحور السيني. لتحقيق الدوران الرأسي حول المحور السيني، يمكننا تدوير المضلع بمقدار 90 درجة ثم تطبيق التدوير المطلوب بالراديان. إليك الكود المعدل:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class RotatingShape extends JPanel implements ActionListener {
private int[] p1x = {200, 200, 240, 240, 220, 220, 200};
private int[] p1y = {200, 260, 260, 240, 240, 200, 200};
private Polygon p1 = new Polygon(p1x, p1y, p1x.length);
private double theta = 0;
private double dt = Math.PI / 36; // Rotation speed
private Timer timer = new Timer(100, this);
public RotatingShape() {
this.setPreferredSize(new Dimension(700, 700));
this.setBackground(Color.white);
p1.translate(-50, 100);
}
@Override
public void actionPerformed(ActionEvent event) {
theta = dt;
repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
int w = this.getWidth();
int h = this.getHeight();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.drawLine(w / 2, 0, w / 2, h);
g2d.drawLine(0, h / 2, w, h / 2);
g2d.rotate(Math.PI / 2, w / 2, h / 2); // Rotate 90 degrees to align with x-axis
g2d.rotate(theta, w / 2, h / 2); // Apply rotation around x-axis
g2d.drawPolygon(p1);
}
public void start() {
timer.start();
}
public static void main(String[] args) {
JFrame frame = new JFrame("Rotating Shape");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
RotatingShape sl = new RotatingShape();
frame.add(sl);
frame.pack();
frame.setVisible(true);
sl.start();
}
}
في هذا الكود نقوم بتدوير المضلع بمقدار 90 درجة بطريقة PaintComponent باستخدام g2d.rotate(Math.PI / 2, w / 2, h / 2). يؤدي هذا إلى محاذاة المضلع مع المحور السيني، مما يسمح لنا بتطبيق التدوير المطلوب بوحدات الراديان باستخدام g2d.rotate(theta, w / 2, h / 2).
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3