Сообщение было отмечено Пожалуйстааа как решение
Решение
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
| public class Task019 {
public static void main(String[] args) {
StraightLine firstLine = new StraightLine(2, -1, -3);
StraightLine secondLine = new StraightLine(-3, -1, 2);
System.out.println(firstLine);
System.out.println("Точки персечения с осями:");
System.out.println(firstLine.getPointIntersectionWithX());
System.out.println(firstLine.getPointIntersectionWithY());
System.out.println();
System.out.println(secondLine);
System.out.println("Точки персечения с осями:");
System.out.println(secondLine.getPointIntersectionWithX());
System.out.println(secondLine.getPointIntersectionWithY());
System.out.println();
System.out.println("Точка пересечения 2-х прямых");
System.out.println(firstLine.getPointIntersectionLines(secondLine));
}
}
class StraightLine {
private int a;
private int b;
private int c;
public StraightLine(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
public String getPointIntersectionWithX() {
return String.format("x = %.2f, y = 0;", (double) -this.c / (double) this.a);
}
public String getPointIntersectionWithY() {
return String.format("x = 0, y = %.2f;", (double) -this.c / (double) this.b);
}
public String getPointIntersectionLines(StraightLine line) {
String result = null;
if (line != null) {
double coeffOne = (double) this.a / (double) line.a;
double coeffTwo = (double) this.b / (double) line.b;
double coeffThree = (double) this.c / (double) line.c;
if (coeffOne == coeffTwo && coeffOne == coeffThree) {
result = "Прямые равны. Имеют бесконечное множество точек пересечения.";
} else if (coeffOne == coeffTwo && coeffOne != coeffThree) {
result = "Прямые параллельны. Точек пересечения нет.";
} else {
double y = (double) (line.a * this.c - this.a * line.c) / (double) (this.a * line.b - line.a * this.b);
double x = (this.b * y + this.c) / (double) -this.a;
result = String.format("Точка пересечения: {%.2f, %.2f};", x, y);
}
}
return result;
}
@Override
public String toString() {
String result = getBlock(this.a, "x", true);
result = result.concat(getBlock(this.b, "y", this.a == 0));
result = result.concat(getBlock(this.c, "", this.a == 0 && this.b == 0));
return result.concat(" = 0");
}
private String getBlock(int number, String prefix, boolean first) {
String result = "";
if (number != 0) {
if (first) {
result = String.format("%d%s", number, prefix);
} else {
String sign = number < 0 ? "-" : "+";
result = String.format(" %s %d%s", sign, Math.abs(number), prefix);
}
}
return result;
}
} |
|
Добавлено через 47 минут
Не увидел об объединении групп параллельности прямых. Доделал. Вот код...
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
| import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Task019 {
public static void main(String[] args) {
List<StraightLine> listLines = new ArrayList<>();
listLines.add(new StraightLine(2, -1, -3));
listLines.add(new StraightLine(-3, -1, 2));
listLines.add(new StraightLine(-3, -1, 2));
listLines.add(new StraightLine(-3, -1, 2));
listLines.add(new StraightLine(-3, -1, 4));
listLines.add(new StraightLine(-3, -1, 5));
listLines.add(new StraightLine(-1, -1, 4));
listLines.add(new StraightLine(-1, -1, 5));
//печатаем все уравнения прямых и их точки пересечения с осями X и Y
for (StraightLine line : listLines) {
System.out.printf("Прямая: %s;%s", line, System.lineSeparator());
System.out.printf("Точки пересечения с осями: %s, %s;%s",
line.getPointIntersectionWithX(), line.getPointIntersectionWithY(), System.lineSeparator());
System.out.println();
}
//ищем пересечения прямых друг с другом (первые 2 из списка)
System.out.println("Точки пересечения 2-х прямых:");
System.out.printf("%s;%s%s;%s", listLines.get(0), System.lineSeparator(), listLines.get(1), System.lineSeparator());
System.out.printf("%s%s", listLines.get(0).getPointIntersectionLines(listLines.get(1)), System.lineSeparator());
System.out.println();
//объеденяем в группы параллельности прямых
Map<StraightLine, List<StraightLine>> groups = getGroupsParallel(listLines);
//печатаем группы параллельности
for (Map.Entry<StraightLine, List<StraightLine>> group : groups.entrySet()) {
if (group.getValue().size() > 0) {
System.out.printf("Прямая %s параллельна с:%s", group.getKey(), System.lineSeparator());
for (StraightLine line : group.getValue()) {
System.out.printf(" %s;%s", line, System.lineSeparator());
}
System.out.println();
}
}
}
public static Map<StraightLine, List<StraightLine>> getGroupsParallel(List<StraightLine> list) {
Map<StraightLine, List<StraightLine>> map = new HashMap<>();
if (list != null && !list.isEmpty()) {
boolean flag;
while (!list.isEmpty()) {
flag = false;
StraightLine line = list.remove(0);
for (StraightLine lineMap : map.keySet()) {
if (lineMap.isParallel(line)) {
map.get(lineMap).add(line);
flag = true;
break;
}
}
if (!flag) {
map.put(line, new ArrayList<>());
}
}
}
return map;
}
}
class StraightLine {
private int a;
private int b;
private int c;
public StraightLine(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
public String getPointIntersectionWithX() {
return String.format("{%.2f, 0}", (double) -this.c / (double) this.a);
}
public String getPointIntersectionWithY() {
return String.format("{0, %.2f}", (double) -this.c / (double) this.b);
}
public boolean isParallel(StraightLine line) {
double coeffOne = (double) this.a / (double) line.a;
double coeffTwo = (double) this.b / (double) line.b;
double coeffThree = (double) this.c / (double) line.c;
return coeffOne == coeffTwo && coeffOne != coeffThree;
}
public boolean isEquals(StraightLine line) {
double coeffOne = (double) this.a / (double) line.a;
double coeffTwo = (double) this.b / (double) line.b;
double coeffThree = (double) this.c / (double) line.c;
return coeffOne == coeffTwo && coeffOne == coeffThree;
}
public String getPointIntersectionLines(StraightLine line) {
String result = null;
if (line != null) {
if (isEquals(line)) {
result = "Прямые равны. Имеют бесконечное множество точек пересечения.";
} else if (isParallel(line)) {
result = "Прямые параллельны. Точек пересечения нет.";
} else {
double y = (double) (line.a * this.c - this.a * line.c) / (double) (this.a * line.b - line.a * this.b);
double x = (this.b * y + this.c) / (double) -this.a;
result = String.format("Точка пересечения: {%.2f, %.2f};", x, y);
}
}
return result;
}
@Override
public String toString() {
String result = getBlock(this.a, "x", true);
result = result.concat(getBlock(this.b, "y", this.a == 0));
result = result.concat(getBlock(this.c, "", this.a == 0 && this.b == 0));
return result.concat(" = 0");
}
private String getBlock(int number, String prefix, boolean first) {
String result = "";
if (number != 0) {
if (first) {
result = String.format("%d%s", number, prefix);
} else {
String sign = number < 0 ? "-" : "+";
result = String.format(" %s %d%s", sign, Math.abs(number), prefix);
}
}
return result;
}
} |
|
Добавлено через 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
| Прямая: 2x - 1y - 3 = 0;
Точки пересечения с осями: {1,50, 0}, {0, -3,00};
Прямая: -3x - 1y + 2 = 0;
Точки пересечения с осями: {0,67, 0}, {0, 2,00};
Прямая: -3x - 1y + 2 = 0;
Точки пересечения с осями: {0,67, 0}, {0, 2,00};
Прямая: -3x - 1y + 2 = 0;
Точки пересечения с осями: {0,67, 0}, {0, 2,00};
Прямая: -3x - 1y + 4 = 0;
Точки пересечения с осями: {1,33, 0}, {0, 4,00};
Прямая: -3x - 1y + 5 = 0;
Точки пересечения с осями: {1,67, 0}, {0, 5,00};
Прямая: -1x - 1y + 4 = 0;
Точки пересечения с осями: {4,00, 0}, {0, 4,00};
Прямая: -1x - 1y + 5 = 0;
Точки пересечения с осями: {5,00, 0}, {0, 5,00};
Точки пересечения 2-х прямых:
2x - 1y - 3 = 0;
-3x - 1y + 2 = 0;
Точка пересечения: {1,00, -1,00};
Прямая -3x - 1y + 2 = 0 параллельна с:
-3x - 1y + 4 = 0;
-3x - 1y + 5 = 0;
Прямая -1x - 1y + 4 = 0 параллельна с:
-1x - 1y + 5 = 0; |
|
1
|