diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d1120094d9ec720a6c591261358a49402f999e0b
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000000000000000000000000000000000000..712ab9d985c20018a0c97b93d2148ac1ffe588a5
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9e0563eb9cc6f1fa3fa4ad712e7e2d9bd216735d
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 0c6b7f84dfde2bd64b22d1c90b432e8ba70231de..5a39b6226143dd3c68c376b1e3361d32b4cc3760 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -1,5 +1,8 @@
+
+
+
@@ -11,7 +14,14 @@
-
+
+
+
+
+
+
+
+
@@ -21,6 +31,7 @@
+
@@ -31,26 +42,37 @@
-
+
+
+
-
-
-
-
-
-
-
-
-
+
@@ -67,10 +89,19 @@
-
+
+
+
+
+
+
+
+
+
+
@@ -82,6 +113,7 @@
1662520054313
+
1662520558309
@@ -101,7 +133,7 @@
-
+
diff --git a/src/main/java/cn/zust/edu/cn/App.java b/src/main/java/cn/zust/edu/cn/App.java
index bf9c122443f372c99495cef0daf5d07e13abdff6..d157ffb0a08f27706820a6231f535a2c47721f76 100644
--- a/src/main/java/cn/zust/edu/cn/App.java
+++ b/src/main/java/cn/zust/edu/cn/App.java
@@ -6,7 +6,16 @@ package cn.zust.edu.cn;
*/
public class App {
public static void main(String[] args) {
- System.out.println("hello world!");
+ ShapeManager shapeManager = new ShapeManager();
+ Rectangle rect = new Rectangle(new Point(10, 10), 100, 200);
+ Triangle tri = new Triangle(new Point(0, 10), new Point(50, 50), new Point(150, 0));
+ Circle cir = new Circle(new Point(100, 100), 100);
+ shapeManager.addShape(rect);
+ shapeManager.addShape(tri);
+ shapeManager.addShape(cir);
+ shapeManager.drawShapes();
+ shapeManager.delShape(rect);
+ shapeManager.drawShapes();
}
}
diff --git a/src/main/java/cn/zust/edu/cn/Circle.java b/src/main/java/cn/zust/edu/cn/Circle.java
new file mode 100644
index 0000000000000000000000000000000000000000..1f185740b92aaa6c6611bcaac439dbdf84ac9146
--- /dev/null
+++ b/src/main/java/cn/zust/edu/cn/Circle.java
@@ -0,0 +1,26 @@
+package cn.zust.edu.cn;
+
+public class Circle implements IShape {
+ Point ptCenter;
+ int radius;
+
+ public Circle(Point center, int r) {
+ this.ptCenter = center;
+ this.radius = r;
+ }
+
+ @Override
+ public double perimeter() {
+ return 2 * Math.PI * radius;
+ }
+
+ @Override
+ public double area() {
+ return Math.PI * radius * radius;
+ }
+
+ @Override
+ public void draw() {
+ System.out.println("Drawing Circle at (" + ptCenter.x + ", " + ptCenter.y + ") with radius " + radius);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/zust/edu/cn/IShape.java b/src/main/java/cn/zust/edu/cn/IShape.java
new file mode 100644
index 0000000000000000000000000000000000000000..017cdba67ea290ab631b8280cef0291c84a4d50f
--- /dev/null
+++ b/src/main/java/cn/zust/edu/cn/IShape.java
@@ -0,0 +1,7 @@
+package cn.zust.edu.cn;
+
+public interface IShape {
+ double perimeter();
+ double area();
+ void draw();
+}
diff --git a/src/main/java/cn/zust/edu/cn/Point.java b/src/main/java/cn/zust/edu/cn/Point.java
index 5661ad0dc525c7f45779a6b9a2d09b9be0a440b6..8d2a940bdaecfe1e8bdeaade52cecf1d2a3c09a0 100644
--- a/src/main/java/cn/zust/edu/cn/Point.java
+++ b/src/main/java/cn/zust/edu/cn/Point.java
@@ -5,5 +5,21 @@ package cn.zust.edu.cn;
* @since 2023/3/7 10:50
*/
public class Point {
+ int x;
+ int y;
-}
+ public Point() {
+ this.x = 0;
+ this.y = 0;
+ }
+
+ public Point(int x, int y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ public Point(Point p) {
+ this.x = p.x;
+ this.y = p.y;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/zust/edu/cn/Rectangle.java b/src/main/java/cn/zust/edu/cn/Rectangle.java
index f70897edc602cc78478ddfb7656749337bdd2cbe..4e578a3fddc8b045212fe221b46dc1e34d5d3b41 100644
--- a/src/main/java/cn/zust/edu/cn/Rectangle.java
+++ b/src/main/java/cn/zust/edu/cn/Rectangle.java
@@ -4,5 +4,38 @@ package cn.zust.edu.cn;
* @author czg
* @since 2023/3/7 10:50
*/
-public class Rectangle {
-}
+public class Rectangle implements IShape {
+ Point ptTopLeft;
+ Point ptTopRight;
+ int width;
+ int height;
+
+ public Rectangle() {
+ this.ptTopLeft = new Point();
+ this.ptTopRight = new Point();
+ this.width = 0;
+ this.height = 0;
+ }
+
+ public Rectangle(Point topleft, int height, int width) {
+ this.ptTopLeft = topleft;
+ this.ptTopRight = new Point(topleft.x + width, topleft.y);
+ this.width = width;
+ this.height = height;
+ }
+
+ @Override
+ public double perimeter() {
+ return 2 * (width + height);
+ }
+
+ @Override
+ public double area() {
+ return width * height;
+ }
+
+ @Override
+ public void draw() {
+ System.out.println("Drawing Rectangle at (" + ptTopLeft.x + ", " + ptTopLeft.y + ") with width " + width + " and height " + height);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/zust/edu/cn/ShapeManager.java b/src/main/java/cn/zust/edu/cn/ShapeManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e2ab98e0cd09157e1b0fe601a8d045069ffc2e5
--- /dev/null
+++ b/src/main/java/cn/zust/edu/cn/ShapeManager.java
@@ -0,0 +1,22 @@
+package cn.zust.edu.cn;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ShapeManager {
+ private final List shapes = new ArrayList<>();
+
+ public void addShape(IShape shape) {
+ shapes.add(shape);
+ }
+
+ public void delShape(IShape shape) {
+ shapes.remove(shape);
+ }
+
+ public void drawShapes() {
+ for (IShape shape : shapes) {
+ shape.draw();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/zust/edu/cn/Triangle.java b/src/main/java/cn/zust/edu/cn/Triangle.java
new file mode 100644
index 0000000000000000000000000000000000000000..c7d6ec52a7a41634dcc6cd05cb0d0b0c1226dc01
--- /dev/null
+++ b/src/main/java/cn/zust/edu/cn/Triangle.java
@@ -0,0 +1,39 @@
+package cn.zust.edu.cn;
+
+public class Triangle implements IShape {
+ Point ptA;
+ Point ptB;
+ Point ptC;
+ double edgeA;
+ double edgeB;
+ double edgeC;
+
+ public Triangle(Point ptA, Point ptB, Point ptC) {
+ this.ptA = ptA;
+ this.ptB = ptB;
+ this.ptC = ptC;
+ this.edgeA = calculateDistance(ptA, ptB);
+ this.edgeB = calculateDistance(ptB, ptC);
+ this.edgeC = calculateDistance(ptC, ptA);
+ }
+
+ private double calculateDistance(Point p1, Point p2) {
+ return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
+ }
+
+ @Override
+ public double perimeter() {
+ return edgeA + edgeB + edgeC;
+ }
+
+ @Override
+ public double area() {
+ double s = perimeter() / 2;
+ return Math.sqrt(s * (s - edgeA) * (s - edgeB) * (s - edgeC));
+ }
+
+ @Override
+ public void draw() {
+ System.out.println("Drawing Triangle with vertices (" + ptA.x + ", " + ptA.y + "), (" + ptB.x + ", " + ptB.y + "), (" + ptC.x + ", " + ptC.y + ")");
+ }
+}
\ No newline at end of file
diff --git a/target/classes/cn/zust/edu/cn/App.class b/target/classes/cn/zust/edu/cn/App.class
new file mode 100644
index 0000000000000000000000000000000000000000..644d416730935062fc2a25cd69270c8f159abb54
Binary files /dev/null and b/target/classes/cn/zust/edu/cn/App.class differ
diff --git a/target/classes/cn/zust/edu/cn/Circle.class b/target/classes/cn/zust/edu/cn/Circle.class
new file mode 100644
index 0000000000000000000000000000000000000000..96c50f9510fe83719a32e59d62b2e12bcec7bf34
Binary files /dev/null and b/target/classes/cn/zust/edu/cn/Circle.class differ
diff --git a/target/classes/cn/zust/edu/cn/IShape.class b/target/classes/cn/zust/edu/cn/IShape.class
new file mode 100644
index 0000000000000000000000000000000000000000..2eacc522c098bb3ecf3b6e4098db6d3e398adcb2
Binary files /dev/null and b/target/classes/cn/zust/edu/cn/IShape.class differ
diff --git a/target/classes/cn/zust/edu/cn/Point.class b/target/classes/cn/zust/edu/cn/Point.class
new file mode 100644
index 0000000000000000000000000000000000000000..3922329b1f6c47e7700b0e9bf6c8855911baca3c
Binary files /dev/null and b/target/classes/cn/zust/edu/cn/Point.class differ
diff --git a/target/classes/cn/zust/edu/cn/Rectangle.class b/target/classes/cn/zust/edu/cn/Rectangle.class
new file mode 100644
index 0000000000000000000000000000000000000000..137515c0df0ea1035eded48e86f30bc8d887a509
Binary files /dev/null and b/target/classes/cn/zust/edu/cn/Rectangle.class differ
diff --git a/target/classes/cn/zust/edu/cn/ShapeManager.class b/target/classes/cn/zust/edu/cn/ShapeManager.class
new file mode 100644
index 0000000000000000000000000000000000000000..5271afff06afef4beaecb02b9c83f41ac997783c
Binary files /dev/null and b/target/classes/cn/zust/edu/cn/ShapeManager.class differ
diff --git a/target/classes/cn/zust/edu/cn/Triangle.class b/target/classes/cn/zust/edu/cn/Triangle.class
new file mode 100644
index 0000000000000000000000000000000000000000..ee89bbeac987e3af6ee23672e6dbb78f521458fb
Binary files /dev/null and b/target/classes/cn/zust/edu/cn/Triangle.class differ