Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# JavaGl239Project
# Итоговый проект по информатике

Проект
### Желобкович Павел

Множество точек на плоскости назовем дваждытреугольным,
если каждая точка этого множества является вершиной хотя бы двух правильных треугольников,
построенных по точкам множества. Определить, удовлетворяет ли заданное множество точек
этому свойству.
12 changes: 7 additions & 5 deletions src/main/java/problem/Problem.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,22 @@
import java.util.Scanner;

/**
* Класс задачи
* Типовая
*/
public class Problem {
/**
* текст задачи
* На плоскости задано множество точек. Найти из них такие 4 точки, что построенный
* по ним 4-хугольник не является самопересекающимся и содержит в себе
* максимальное количество точек множества
*/
public static final String PROBLEM_TEXT = "ПОСТАНОВКА ЗАДАЧИ:\n" +
"Заданы два множества точек в пространстве.\n" +
"Требуется построить пересечения и разность этих множеств";
"Задано множество точек на плоскости.\n" +
"Требуется найти такие 4 точки ,что построенный по ним 4-хугольник не является самопересекающимся и содержит в себе максимальное количество точек множества";

/**
* заголовок окна
*/
public static final String PROBLEM_CAPTION = "Итоговый проект ученика 10-7 Иванова Ивана";
public static final String PROBLEM_CAPTION = "Итоговый проект ученика 10-3 класса Желобковича Павла ";

/**
* путь к файлу
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/project/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package project;

public class Main {
public static void main(String[] args) {
MyFrame frame = new MyFrame("title");
}
}
120 changes: 120 additions & 0 deletions src/main/java/project/MyFrame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
package project;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class MyFrame extends JFrame {

/*
Данный метод помогает читать точки из файла
*/
public void getPointsFromFile() {
points.clear();
try {
File file = new File("in.txt");
Scanner sc = new Scanner(file);
while (sc.hasNextLine()) {
double x = sc.nextDouble();
double y = sc.nextDouble();
Point point = new Point(x, y);
points.add(point);
}
sc.close();
} catch (Exception e) {
System.out.println("U did something wrong: " + e);
}
}

Solution solution = new Solution(new ArrayList<>());
List<Point> points = new ArrayList<>();

public MyFrame(String title) {
super(title);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
addMouseListener(new MyMouseListener());
setSize(300, 300);
}

@Override
public void paint(Graphics g) {
super.paint(g);

Graphics2D graphics2D = (Graphics2D) g;
BasicStroke stroke = new BasicStroke(2);
graphics2D.setStroke(stroke);

for (Point value : points) {
value.count = 0;
g.drawOval((int) value.x - 5, (int) value.y - 5, 10, 10);
}

for (int i = 0; i < points.size(); i++) {
for (int j = i + 1; j < points.size(); j++) {
for (int k = j + 1; k < points.size(); k++) {
if (solution.isRightTriangle(points.get(i), points.get(j), points.get(k))) {
increaseCount(i, j, k);
Triangle newTriangle = new Triangle(points.get(i), points.get(j), points.get(k));
solution.triangles.add(newTriangle);
solution.drawTriangle(g, newTriangle);
}
}
}
}

for (int i = 0; i < solution.triangles.size(); i++) {
g.setColor(Color.MAGENTA);

if (solution.triangles.get(i).p1.count >= 2
|| solution.triangles.get(i).p2.count >= 2
|| solution.triangles.get(i).p3.count >= 2) {
solution.drawTriangle(g, solution.triangles.get(i));
}
}

for (Point point : points) {
if (point.count >= 2) {
g.setColor(Color.RED);
g.drawOval((int) point.x - 5, (int) point.y - 5, 10, 10);
g.fillOval((int) point.x - 5, (int) point.y - 5, 10, 10);
}
}
}

private void increaseCount(int i, int j, int k) {
points.get(i).count++;
points.get(j).count++;
points.get(k).count++;
}

private class MyMouseListener implements MouseListener {
@Override
public void mouseClicked(MouseEvent e) {
Point newPoint = new Point(e.getX(), e.getY());
points.add(newPoint);
repaint();
}

@Override
public void mousePressed(MouseEvent e) {
}

@Override
public void mouseReleased(MouseEvent e) {
}

@Override
public void mouseEntered(MouseEvent e) {
}

@Override
public void mouseExited(MouseEvent e) {
}
}
}
19 changes: 19 additions & 0 deletions src/main/java/project/Point.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package project;

public class Point {
double x;
double y;

int count;

public Point(double x, double y) {
this.x = x;
this.y = y;
}

public double getLength(Point p2) {
return Math.sqrt(
Math.pow(this.x - p2.x, 2) + Math.pow(this.y - p2.y, 2)
);
}
}
24 changes: 24 additions & 0 deletions src/main/java/project/Solution.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package project;

import java.awt.*;
import java.util.List;

public class Solution {
List<Triangle> triangles;

public Solution(List<Triangle> triangles) {
this.triangles = triangles;
}

public void drawTriangle(Graphics g, Triangle triangle) {
g.drawLine((int) triangle.p1.x, (int) triangle.p1.y, (int) triangle.p2.x, (int) triangle.p2.y);
g.drawLine((int) triangle.p1.x, (int) triangle.p1.y, (int) triangle.p3.x, (int) triangle.p3.y);
g.drawLine((int) triangle.p2.x, (int) triangle.p2.y, (int) triangle.p3.x, (int) triangle.p3.y);
}

public boolean isRightTriangle(Point p1, Point p2, Point p3) {
return Math.abs(p1.getLength(p2) - p1.getLength(p3)) <= 25
&& Math.abs(p1.getLength(p3) - p2.getLength(p3)) <= 25
&& Math.abs(p1.getLength(p2) - p2.getLength(p3)) <= 25;
}
}
11 changes: 11 additions & 0 deletions src/main/java/project/Triangle.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package project;

public class Triangle {
public Point p1, p2, p3;

public Triangle(Point p1, Point p2, Point p3) {
this.p1 = p1;
this.p2 = p2;
this.p3 = p3;
}
}