Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static void showGraph(String functionName) {
- JFrame graphFrame = new JFrame("График: " + functionName);
- graphFrame.setSize(800, 600);
- graphFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
- JPanel graphPanel = new JPanel() {
- @Override
- protected void paintComponent(Graphics g) {
- super.paintComponent(g);
- Graphics2D g2d = (Graphics2D) g;
- g2d.setStroke(new BasicStroke(2));
- g2d.setColor(Color.BLUE);
- int width = getWidth();
- int height = getHeight();
- int originX = width / 2;
- int originY = height / 2;
- // Оси
- g2d.setColor(Color.BLACK);
- g2d.drawLine(0, originY, width, originY); // X-axis
- g2d.drawLine(originX, 0, originX, height); // Y-axis
- g2d.setColor(Color.RED);
- // Переменные для последней точки (для рисования линий)
- Double prevPixelX = null;
- Double prevPixelY = null;
- for (int x = -originX; x < originX; x++) {
- double scaledX = x / 50.0; // Масштаб
- double y = 0;
- // Выбор функции
- switch (functionName) {
- case "Линейные":
- y = scaledX; // Линейная функция
- break;
- case "Квадратичные":
- y = Math.pow(scaledX, 2);
- break;
- case "Кубические":
- y = Math.pow(scaledX, 3);
- break;
- case "Синус":
- y = Math.sin(scaledX);
- break;
- case "Косинус":
- y = Math.cos(scaledX);
- break;
- case "Тангенс":
- y = Math.tan(scaledX);
- break;
- case "Котангенс":
- y = 1.0 / Math.tan(scaledX);
- break;
- case "Гиперб. синус":
- y = Math.sinh(scaledX);
- break;
- case "Гиперб. косинус":
- y = Math.cosh(scaledX);
- break;
- }
- // Преобразование в пиксели
- int pixelX = originX + x;
- int pixelY = originY - (int) (y * 50); // Масштаб Y
- // Проверяем, что точка внутри видимого диапазона
- if (pixelY >= 0 && pixelY < height) {
- // Если есть предыдущая точка, соединяем её с текущей
- if (prevPixelX != null && prevPixelY != null) {
- g2d.drawLine(prevPixelX.intValue(), prevPixelY.intValue(), pixelX, pixelY);
- }
- // Обновляем предыдущую точку
- prevPixelX = (double) pixelX;
- prevPixelY = (double) pixelY;
- } else {
- // Если точка выходит за границы, сбрасываем предыдущую точку
- prevPixelX = null;
- prevPixelY = null;
- }
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement