Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 1
Регистрация: 19.02.2014
Сообщений: 24

вписанная окружность в треугольник java

01.06.2016, 21:31. Показов 1567. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте,помогите найти ошибку
нужно вписать окружность в треугольник, треугольник рисуется,а вот окружность нет(

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Ellipse2D;
 
public class Point {
    private double m1,m2,v1,v2,b2,b1;
    public double x;
    public double y;
    public Point(double a,double b){
        x=a;
        y=b;
    }
    public void setX(double x){
        this.x=x;
}
    public double getX(){
        return x;
    }
    public void setY(double y){
        this.y=y;
    }
    public double getY(){
        return y;
    }
    public double SideLenght(double x1,double y1,double x2,double y2){
        double a = Math.sqrt(Math.pow((x2-x1),2)+(Math.pow((y2-y1),2)));
        return  a;
}
    public double Angels(Point p1,Point p2,Point p3){
        double a = (p2.getX()-p1.getX())*(p3.getX()-p1.getX())+(p2.getY()-p1.getY())*(p3.getY()-p1.getY());
        double exp = a/(SideLenght(p1.getX(),p1.getY(),p2.getX(),p2.getY())/SideLenght(p1.getX(),p1.getY(),p3.getX(),p3.getY()));
        return Math.acos(exp);
    }
    double Perim(double s1,double s2,double s3){
        return s1+s2+s3;
    }
    double Sqare(double s1,double s2,double s3){
        double p = (s1+s2+s3)/2;
        return Math.sqrt((p-s1)*(p-s2)*(p-s3));
    }
    double radius(double S,double p){
        return S/p;
    }
    double Radius(double S,double s1,double s2,double s3){
        return (s1*s2*s3)/(4*S);
    }
    public void drawCircle(double R,double x1,double y1,double x2, double y2, double l1, double m1,double l2, double m2,Graphics g){
 
        double X, Y;
        if ((l1 != 0) && ((m1 / l1) - (m2 / l2) != 0) && (l2 != 0))
        {
            X = ((m1 / l1) * x1 - y1 - (m2 / l2) * x2 + y2) / ((m1 / l1) - (m2 / l2));
            Y = (m1 * X - m1 * x1 + l1 * y1) / l1;
            Graphics2D g2D = (Graphics2D) g;
            g2D.setPaint(Color.BLUE);
            Ellipse2D el = new Ellipse2D.Double((int) X, (int) Y, 5, 5);//центр окружности
            g2D.draw(el);
            Ellipse2D el1 = new Ellipse2D.Double(X - R, Y - R, R * 2, R * 2); //сама окружность
            g2D.draw(el1);
        }
    }
 
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
 
public class Frame extends JFrame {
    private JButton jbtn;
   
    public Point[] pt = new Point[3];
    public JTextField x1,x2,x3,y1,y2,y3;
    private JPanel panel;
    private DrawPanel dr;
 
    public Frame() {
        initComponents();
    }
 
    private void initComponents(){
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(700, 700);
        setLocationByPlatform(true);
        //setExtendedState(MAXIMIZED_BOTH);
        
        jbtn = new JButton("Нарисовать");
        x1 = new JTextField(4);
        y1 = new JTextField(4);
        x2 = new JTextField(4);
        y2 = new JTextField(4);
        x3 = new JTextField(4);
        y3 = new JTextField(4);
        panel= new JPanel(new GridBagLayout());
 
 
        GridBagConstraints gbc = new GridBagConstraints();
 
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.insets = new Insets(5,5,5,5);
        panel.add(x1,gbc);
 
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.insets = new Insets(5,5,5,5);
        panel.add(y1,gbc);
 
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.insets = new Insets(5,5,5,5);
        panel.add(x2,gbc);
 
        gbc.gridx = 1;
        gbc.gridy = 1;
        gbc.insets = new Insets(5,5,5,5);
        panel.add(y2,gbc);
 
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.insets = new Insets(5,5,5,5);
        panel.add(x3,gbc);
 
        gbc.gridx = 1;
        gbc.gridy = 2;
        gbc.insets = new Insets(5,5,5,5);
        panel.add(y3,gbc);
 
        gbc.gridx = 2;
        gbc.gridy = 0;
        gbc.insets = new Insets(5,5,5,5);
        panel.add(jbtn,gbc);
 
        this.add(panel,"North");
   
       // dr.setSize(200,100);
        //this.add(dr, "Center");
 
 
 
        jbtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                pt[0] = new Point(Double.parseDouble(x1.getText()),Double.parseDouble(y1.getText()));
                pt[1] = new Point(Double.parseDouble(x2.getText()),Double.parseDouble(y2.getText()));
                pt[2] = new Point(Double.parseDouble(x3.getText()),Double.parseDouble(y3.getText()));
                dr = new DrawPanel(600,600,pt[0],pt[1],pt[2]);
                add(dr);
                //dr.repaint();
 
 
            }
        });
    }
    private static class DrawPanel extends JComponent {
        private int width, heigth;
        public Point Pt = new Point(2,3);
        private double R,r,p,s1,s2,s3,S,ang1,ang2,ang3,det;
        public Point[] pt = new Point[3];
        public double x1,x2,x3,y1,y2,y3,x4,y4,x5,y5,x6,y6;
        public Point m1 = new Point(0,0);
        public Point m2 = new Point(0,0);
        public Point b1 = new Point(0,0);
        public Point b2 = new Point(0,0);
        public Point v1 = new Point(0,0);
        public Point v2 = new Point(0,0);
        public Point v3 = new Point(0,0);
        public Point v4 = new Point(0,0);
        private int coef1=1,coef2=1;//коэффициенты направления
     
        public DrawPanel(int width,int heigth, Point _pt,Point _pt1,Point _pt2){
            pt[0] = new Point(_pt.x,_pt.y);
            pt[1] = new Point(_pt1.x,_pt1.y);
            pt[2] = new Point(_pt2.x,_pt2.y);
            this.width = width;
            this.heigth = heigth;
            initComponents();
        }
        private void initComponents(){
            x1 = pt[0].getX();
            y1 = pt[0].getY();
            x2 = pt[1].getX();
            y2 = pt[1].getY();
            x3 = pt[2].getX();
            y3 = pt[2].getY();
            s1 = Pt.SideLenght(x1, y1, x2, y2);
            s2 = Pt.SideLenght(x2, y2, x3, y3);
            s3 = Pt.SideLenght(x3, y3, x1, y1);
            S = Pt.Sqare(s1, s2, s3);
            p = (Pt.Perim(s1, s2, s3))/2;
            r = Pt.radius(S, p);
            R = Pt.Radius(S, s1, s2, s3);
            //углы
            ang1 = Pt.Angels(pt[2], pt[0], pt[1]);
            ang2 = Pt.Angels(pt[0], pt[1], pt[2]);
            ang3 = Pt.Angels(pt[1], pt[2], pt[0]);
            //середины сторон s1 s2
            m1.x = (x1+x2)/2;
            m1.y = (y1+y2)/2;
            m2.x = (x2+x3)/2;
            m2.y = (y2+y3)/2;
            //поворот точки pt[2] вокруг середины стороны s2
            x6 = pt[2].x;
            y6 = pt[2].y;
            x6 -=m2.x;
            y6 -=m2.y;
            b1.x = x6*Math.cos(Math.PI/2)-y6*Math.sin(Math.PI/2);
            b1.y = x6*Math.sin(Math.PI/2)+y6*Math.cos(Math.PI/2);
            b1.x +=m2.x;
            b1.y +=m2.y;
            v1.x = b1.x - m2.x;
            v1.y = b1.y - m2.y;
            //поворот точки pt[0] вокруг середины стороны s1
            x6 = pt[0].x;
            y6 = pt[0].y;
            x6 -=m1.x;
            y6 -=m1.y;
            b2.x = x6*Math.cos(Math.PI/2)-y6*Math.sin(Math.PI/2);
            b2.y = x6*Math.sin(Math.PI/2)+y6*Math.cos(Math.PI/2);
            b2.x +=m1.x;
            b2.y +=m1.y;
            v2.x = b2.x - m1.x;
            v2.y = b2.y - m1.y;
            //вычисление знака 3 координаты векторного произведения векторов, между которыми строится биссектриса
            det = (x2-x1)*(y3-y1)-(x3-x1)*(y2-y1);
            if(det>0) coef1 = -1;
            det = (x2-x3)*(y1-y3)-(x1-x3)*(y2-y3);
            if(det>0) coef2 = -1;
            //поворот точки pt[2] вокруг точки pt[0]
            x4 = pt[2].x;
            y4 = pt[2].y;
            x4 -=pt[0].x;
            y4 -=pt[0].y;
            b1.x = x4*Math.cos(coef1*ang2/2)-y4*Math.sin(coef1*ang2/2);
            b1.y = x4*Math.sin(coef1*ang2/2)+y4*Math.cos(coef1*ang2/2);
            b1.x +=pt[0].x;
            b1.y +=pt[0].y;
            v3.x = b1.x - pt[0].x;
            v3.y = b1.y - pt[0].y;
            //поворот точки pt[0] вокруг точки pt[2]
            x5 = pt[0].x;
            y5 = pt[0].y;
            x5 -=pt[2].x;
            y5 -=pt[2].y;
            b2.x = x5*Math.cos(coef2*ang1/2)-y5*Math.sin(coef2*ang1/2);
            b2.y = x5*Math.sin(coef2*ang1/2)+y5*Math.cos(coef2*ang1/2);
            b2.x +=pt[2].x;
            b2.y +=pt[2].y;
            v4.x = b2.x - pt[2].x;
            v4.y = b2.y - pt[2].y;
        }
 
 
        public void paintComponent(Graphics g){
            Graphics2D g2D = (Graphics2D) g;
            g2D.drawRect(0,0,this.width, this.heigth);
            //рисуем треугольник
            g2D.drawLine((int) (x1),(int)(y1),(int)(x2),(int)(y2));
            g2D.drawLine((int) (x2),(int)(y2),(int)(x3),(int)(y3));
            g2D.drawLine((int) (x3),(int)(y3),(int)(x1),(int)(y1));
            
            //Pt.drawCircle(R, m1.x, m1.y, m2.x, m2.y, v2.x, v2.y, v1.x,v1.y, g2D);//описанная окружность
            //рисуем треугольник
            Pt.drawCircle(r, x3, y3, x1, y1, v4.x, v4.y, v3.x, v3.y, g2D);
        }
    }
 
}
Java
1
2
3
4
5
6
7
8
9
10
import javax.swing.*;
import java.awt.*;
 
public class Main {
    public static void main(String[] args) {
        (new Frame()).setVisible(true);
 
    }
 
   }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.06.2016, 21:31
Ответы с готовыми решениями:

Вписанная окружность
Помогите пожалуйста всё это скомпоновать: ЗАДАЧА: Даны треугольники с заданными координатами вершин на плоскости, для каждого...

Окружность вписанная в треугольник
Добрый день всем , подскажите пожалуйста как реализовать, как в треугольник вписать окружность ? int x1, x2, x3, y1, y2, y3; ...

Треугольник, биссектрисы, вписанная окружность
Следующая программа рисует треугольник в декартовой системе координат и рисует его биссектрисы ,и вписывает окружность в этот треугольник ...

1
 Аватар для RedPatrick
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
02.06.2016, 09:56
Юльч, Рисуете все правильно, ошиблись в математике, очень намудрили, делаете лишнее. Вычисления немаленькие, поэтому перепишите очень аккуратно с комментариями - нашли стороны, нашли углы, нашли биссектрисы, точку их пересечения и радиус.
Миниатюры
вписанная окружность в треугольник java  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.06.2016, 09:56
Помогаю со студенческими работами здесь

Вписанная окружность.
как нарисовать вписанную окружность в треугольнике по заданной стороне равностороннего треугольника...????

Трапеция и вписанная окружность
Задача такая: Дана трапеция (равнобедренная или нет - не указано), в которую вписана окружность. Известно, что периметр трапеции в 2...

Вписанная и описанная окружность треугольника.
Всем доброго времени суток, извиняюсь, если пишу не в том разделе, подскажите пожалуйста, как определить радиус вписаной и описанной...

Задача по теме «Вписанная окружность»
В треугольнике АВС углы А и В равны 38° и 86° соответственно. Найдите углы треугольника, вершинами которого являются точки касания сторон с...

Окружность вписанная в квадрат (допустил ошибку)
Работать с паскалем только начал, задачка простая, но где то допустил ошибку, прошу помочь. Задача: На квадрат наложили круг такой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru