画一条线-最高点

埃利斯佩

我画了一条基于滑块的角度的线。

我试图使线的末端Y坐标确定一定的数字(比方说300),即使它成一定角度也是如此。

有关如何执行此操作的任何想法?这是到目前为止我的工作:

double angle = intAngle;
angle = angle * Math.PI / 180;
double length = 300;

graphics.setColor(Color.RED);

double startX = 300;
double startY = 100;
double endX = startX + length * Math.cos(angle);
double endY = startY + length * Math.sin(angle);
double end2X;
double end2Y;   
double dblAngle;
double angle2;
int intAngle2;
double start2X = endX;
double start2Y = endY;
intAngle2 = 180 - intAngle;
angle2 = intAngle2;
angle2 = (angle2 * Math.PI / 180);
end2X = (start2X - length * Math.cos(angle2));
end2Y = (start2Y - length * Math.sin(angle2));

int intEndX = (int)endX;
int intEndY = (int)endY;

if(blnButton == true){

  graphics.draw(new Line2D.Double(startX, startY, endX, endY));    

  graphics.draw(new Line2D.Double(start2X, start2Y, end2X, end2Y));       

}

疯狂程序员

可能有一种更简单的方法,但基本上,您可以根据角度和角度的倒数(角度-360)在圆上计算两个点

以半径为150的圆为例,这将给您300条线

例子

红线是从圆心到指定天使所代表的圆上的点的线。蓝色是反色。每行是150像素的行,也就是说,它们的长度是300像素。

此示例分别绘制,但实际上,它们可以绘制为单行

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.geom.Ellipse2D;
import java.awt.geom.Line2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new BorderLayout());

            DrawPane drawPane = new DrawPane();
            add(drawPane);

            JSlider slider = new JSlider(0, 100);
            add(slider, BorderLayout.SOUTH);
            slider.addChangeListener(new ChangeListener() {
                @Override
                public void stateChanged(ChangeEvent e) {
                    drawPane.setAngleInDegrees(360d * (slider.getValue() / 100d));
                }
            });
            slider.setValue(0);
        }

    }

    public class DrawPane extends JPanel {

        private double angle;

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(400, 400);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();

            // Radius of the circle
            double r = 150;
            // Degrees to radians...
            double radians = Math.toRadians(angle);

            // The end point on the circle...
            int endX = (int) Math.round(r * Math.cos(radians));
            int endY = (int) Math.round(r * Math.sin(radians));

                        // The start point on the circle, 360 degress from the
            // start angle
            radians = Math.toRadians(angle - 360);
            int startX = (int) Math.round(r * Math.cos(radians));
            int startY = (int) Math.round(r * Math.sin(radians));

            // Offset for the ellipse (center of the screen)
            double x = (getWidth() / 2d) - r;
            double y = (getWidth() / 2d) - r;

            g2d.setColor(Color.LIGHT_GRAY);
            g2d.draw(new Ellipse2D.Double(x, y, r * 2, r * 2));
            // Center of the circle...
            x = (getWidth() / 2d);
            y = (getWidth() / 2d);

            // One single line
            //g2d.setColor(Color.BLACK);
            //g2d.draw(new Line2D.Double(x - startX, y - startY, x + endX, y + endY));

            g2d.setColor(Color.RED);
            g2d.draw(new Line2D.Double(x, y, x - startX, y - startY));
            g2d.setColor(Color.BLUE);
            g2d.draw(new Line2D.Double(x, y, x + endX, y + endY));

            g2d.dispose();
        }

        public void setAngleInDegrees(double value) {
            if (angle != value) {
                angle = Math.min(Math.max(value, 0), 360);
                repaint();
            }
        }

    }

}

或类似的规定...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据最新的“ n”个蜡烛的最高点绘制一条水平线?

来自分类Dev

如果当前会议正在巩固,我如何在亚洲市场的高点和低点之间画一条线,直到下届会议开始?

来自分类Dev

如果当前会议正在巩固,我如何在亚洲市场的高点和低点之间画一条线,直到下届会议开始?

来自分类Dev

BabylonJS画一条线

来自分类Dev

BabylonJS画一条线

来自分类Dev

慢慢画一条线

来自分类Dev

如何在图表js中绘制一条线到最高数据点?

来自分类Dev

通过从一天中的最低点减去最高点来对累积时间序列进行下采样

来自分类常见问题

UIView最高点低于预期

来自分类Dev

获取轮廓最高点的坐标

来自分类Dev

UIView最高点低于预期

来自分类Dev

标记每天最高点(在24小时内仅标记最高点)

来自分类Dev

片段着色器-画一条线?

来自分类Dev

从UILabel到UIImage画一条线

来自分类Dev

在Android中的ImageView上方画一条线

来自分类Dev

在UITextView内画一条线-NSAttributedString

来自分类Dev

如何用matplotlib画一条线?

来自分类Dev

在精灵套件中画一条线

来自分类Dev

如何画一条线WPF

来自分类Dev

在WinAPI中的单词旁边画一条线

来自分类Dev

用UIBezierPath画一条线

来自分类Dev

如何只画一条线

来自分类Dev

在画布上画一条线

来自分类Dev

用垂直装饰画一条线

来自分类Dev

迅速在NSView上画一条线

来自分类Dev

Java Swing,以特定角度画一条线?

来自分类Dev

为什么MoveTo()画一条线?

来自分类Dev

在jetpack中画一条线

来自分类Dev

在pyplot中的图例上画一条线