Advertisement
dxvmxnd

SHOW_FORM

Feb 24th, 2025
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.89 KB | None | 0 0
  1. public static void showGraph(String functionName) {
  2. JFrame graphFrame = new JFrame("График: " + functionName);
  3. graphFrame.setSize(800, 600);
  4. graphFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  5.  
  6. JPanel graphPanel = new JPanel() {
  7. @Override
  8. protected void paintComponent(Graphics g) {
  9. super.paintComponent(g);
  10. Graphics2D g2d = (Graphics2D) g;
  11. g2d.setStroke(new BasicStroke(2));
  12. g2d.setColor(Color.BLUE);
  13.  
  14. int width = getWidth();
  15. int height = getHeight();
  16. int originX = width / 2;
  17. int originY = height / 2;
  18.  
  19. // Оси
  20. g2d.setColor(Color.BLACK);
  21. g2d.drawLine(0, originY, width, originY); // X-axis
  22. g2d.drawLine(originX, 0, originX, height); // Y-axis
  23.  
  24. g2d.setColor(Color.RED);
  25.  
  26. // Переменные для последней точки (для рисования линий)
  27. Double prevPixelX = null;
  28. Double prevPixelY = null;
  29.  
  30. for (int x = -originX; x < originX; x++) {
  31. double scaledX = x / 50.0; // Масштаб
  32. double y = 0;
  33.  
  34. // Выбор функции
  35. switch (functionName) {
  36. case "Линейные":
  37. y = scaledX; // Линейная функция
  38. break;
  39. case "Квадратичные":
  40. y = Math.pow(scaledX, 2);
  41. break;
  42. case "Кубические":
  43. y = Math.pow(scaledX, 3);
  44. break;
  45. case "Синус":
  46. y = Math.sin(scaledX);
  47. break;
  48. case "Косинус":
  49. y = Math.cos(scaledX);
  50. break;
  51. case "Тангенс":
  52. y = Math.tan(scaledX);
  53. break;
  54. case "Котангенс":
  55. y = 1.0 / Math.tan(scaledX);
  56. break;
  57. case "Гиперб. синус":
  58. y = Math.sinh(scaledX);
  59. break;
  60. case "Гиперб. косинус":
  61. y = Math.cosh(scaledX);
  62. break;
  63. }
  64.  
  65. // Преобразование в пиксели
  66. int pixelX = originX + x;
  67. int pixelY = originY - (int) (y * 50); // Масштаб Y
  68.  
  69. // Проверяем, что точка внутри видимого диапазона
  70. if (pixelY >= 0 && pixelY < height) {
  71. // Если есть предыдущая точка, соединяем её с текущей
  72. if (prevPixelX != null && prevPixelY != null) {
  73. g2d.drawLine(prevPixelX.intValue(), prevPixelY.intValue(), pixelX, pixelY);
  74. }
  75.  
  76. // Обновляем предыдущую точку
  77. prevPixelX = (double) pixelX;
  78. prevPixelY = (double) pixelY;
  79. } else {
  80. // Если точка выходит за границы, сбрасываем предыдущую точку
  81. prevPixelX = null;
  82. prevPixelY = null;
  83. }
  84. }
  85. }
  86. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement