Вывод треугольника в JFrame - Java
Формулировка задачи:
Всем доброго времени суток. Программирую на яве почти месяц и решил создать маленькую программу, которая представляет собой оконное приложение. Пользователь вводить длинны сторон треугольника, а программка вычисляет размеры медиан, биссектрис, высот, площадь и т.д. С этой задачей я справился прекрасно. Но в голову пришла мысль вывести этот треугольник в новом окне графическим способом. Задача показалась интересной. Три дня думал сам, но пришлось писать на этот форум. Я создал окно 500 на 500. Координаты первой вершины взял (250,250). Получается, что у меня даны лишь размеры сторон, но не координаты. Получается, что надо найти координаты двух других вершин. Создал переменные х2,у2,х3,у3. Вообще координату х2 можно задать рандомно. Пробовал найти у2 через длину стороны по координатам, а также через уравнение прямой, но выходит мягко говоря как то сомнительно. Очень хочу разобраться в данной задачи. Если кто-то поделиться хоть каким-то советом, буду очень признателен. Заранее огромное спасибо за помощь. Задача кажется простой, но наверное мешает недостаток опыта.
Решение задачи: «Вывод треугольника в JFrame»
textual
Листинг программы
public class height extends JFrame { TextField storona1, storona2, storona3, chisla1, h1, h2, h3, m1, m2, m3, b1, b2, b3; public double square, st1, st2, st3, p, d1, d2, d3; String data; public height() { super("Трикутник"); setDefaultCloseOperation(EXIT_ON_CLOSE); Box storony = Box.createVerticalBox(); storony.add(new JLabel("Сторони")); storona1 = new TextField(13); storona1.setText("Сторона 1"); storona2 = new TextField(13); storona2.setText("Сторона 2"); storona3 = new TextField(13); storona3.setText("Сторона 3"); storony.add(storona1); storony.add(storona2); storony.add(storona3); Box height = Box.createVerticalBox(); height.add(new JLabel("Висоти")); h1 = new TextField(7); h2 = new TextField(7); h3 = new TextField(7); height.add(h1); h1.setPreferredSize(storona1.getPreferredSize()); height.add(h2); h2.setPreferredSize(storona2.getPreferredSize()); height.add(h3); h3.setPreferredSize(storona3.getPreferredSize()); Box bis = Box.createVerticalBox(); bis.add(new JLabel("Бісектриси")); b1 = new TextField(7); b2 = new TextField(7); b3 = new TextField(7); bis.add(b1); b1.setPreferredSize(storona1.getPreferredSize()); bis.add(b2); b2.setPreferredSize(storona2.getPreferredSize()); bis.add(b3); b3.setPreferredSize(storona3.getPreferredSize()); Box med = Box.createVerticalBox(); med.add(new JLabel("Медіани")); m1 = new TextField(7); m2 = new TextField(7); m3 = new TextField(7); med.add(m1); m1.setPreferredSize(storona1.getPreferredSize()); med.add(m2); m2.setPreferredSize(storona2.getPreferredSize()); med.add(m3); m3.setPreferredSize(storona3.getPreferredSize()); Box sq = Box.createVerticalBox(); sq.add(new JLabel("Площа")); chisla1 = new TextField(); sq.add(chisla1); Box rez = Box.createVerticalBox(); JButton rezultat = new JButton("Порахувати!"); rezultat.addActionListener(new rezultButton()); rez.add(rezultat); Box main1 = Box.createHorizontalBox(); main1.add(storony); main1.add(height); main1.add(med); main1.add(bis); main1.add(rez); main1.add(sq); setContentPane(main1); setResizable(false); main1.setBorder(new CompoundBorder(new BevelBorder(BevelBorder.RAISED), new LineBorder(Color.GREEN, 8))); pack(); } public class rezultButton implements ActionListener { @Override public void actionPerformed(ActionEvent e) { st1 = Integer.parseInt(storona1.getText()); st2 = Integer.parseInt(storona2.getText()); st3 = Integer.parseInt(storona3.getText()); d1 = Math.pow(st1, 2); d2 = Math.pow(st2, 2); d3 = Math.pow(st3, 2); JFrame okno = new JFrame(); if ((st1 <= 0) || (st2 <= 0) || (st3 <= 0)) { JOptionPane.showMessageDialog(okno, "Сторони не можуть бути меншими за 0", "Будьте уважними", JOptionPane.ERROR_MESSAGE); } if ((st1 > st2 + st3) || (st2 > st3 + st1) || (st3 > st2 + st1)) { JOptionPane.showMessageDialog(okno, "Такого трикутника не існує", "Помилка", JOptionPane.ERROR_MESSAGE); } if ((st1 == st2) || (st1 == st3) || (st2 == st3)) { JOptionPane.showMessageDialog(okno, "Цей трикутник рівнобедрений", "Додаткова інформація", JOptionPane.INFORMATION_MESSAGE); } if ((st1 == st2) & (st1 == st3)) { JOptionPane.showMessageDialog(okno, "Цей трикутник рівносторонній", "Додаткова інформація", JOptionPane.INFORMATION_MESSAGE); } if ((d1 + d2 == d3) || (d2 + d3 == d1) || (d1 + d3 == d2)) { JOptionPane.showMessageDialog(okno, "Цей трикутник прямокутний", "Додаткова інформація", JOptionPane.INFORMATION_MESSAGE); } p = (st1 + st2 + st3) / 2; square = Math.sqrt(p * (p - st1) * (p - st2) * (p - st3)); data = Double.toString(square); chisla1.setText(data); height(); mediana(); bisectrysa(); MyFrame gr = new MyFrame(); gr.setBounds(0,0,500,500); gr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); gr.setVisible(true); } public void height() { double Ha1 = ((2 / st1) * square); double Ha2 = (2 / st2) * square; double Ha3 = (2 / st3) * square; h1.setText(Double.toString(Ha1)); h2.setText(Double.toString(Ha2)); h3.setText(Double.toString(Ha3)); } public void mediana() { String M1 = Double.toString(Math.sqrt(2 * d2 + 2 * d3 - d1) / 2); String M2 = Double.toString(Math.sqrt(2 * d1 + 2 * d3 - d2) / 2); String M3 = Double.toString(Math.sqrt(2 * d1 + 2 * d2 - d3) / 2); m1.setText(M1); m2.setText(M2); m3.setText(M3); } public void bisectrysa() { double A11 = ((st1 * st3) / (st1 + st2)); double A12 = (st2 * st3) / (st1 + st2); double A21 = (st1 * st2) / (st1 + st3); double A22 = (st3 * st2) / (st1 + st3); double A31 = (st2 * st1) / (st2 + st3); double A32 = (st3 * st2) / (st2 + st3); String L1 = Double.toString(Math.sqrt(st1 * st2 - A11 * A12)); String L2 = Double.toString(Math.sqrt(st1 * st3 - A21 * A22)); String L3 = Double.toString(Math.sqrt(st2 * st3 - A31 * A32)); b1.setText(L1); b2.setText(L2); b3.setText(L3); } [B][I]class MyFrame extends JFrame { public void paint(Graphics g) { g.drawLine(400,400, (int) (st3+400),400); int x2= (int) ((st1-st2+d3+500*st3)/(2*st3)); int y2= (int) (Math.sqrt(st1-Math.pow((st2-400),2))+400); g.drawLine(x2,y2,400,400); g.drawLine(x2,y2, (int) (st3+400),400); [/I][/B] } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д