Skip to content

Commit 5fea805

Browse files
committed
Add Ex 16 09 and Ex 22 10
1 parent 164d034 commit 5fea805

File tree

8 files changed

+432
-10
lines changed

8 files changed

+432
-10
lines changed

ch_09/exercise09_09/RegularPolygon.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
* setSide(side: double) :void |
1919
* getNumSides(): double |
2020
* setNumSides(numSides:int) :void |
21-
* setX(newX:int) :void |
22-
* getX(): double |
23-
* setY(newY:int) :void |
24-
* getY(): double |
21+
* setCenterX(newX:int) :void |
22+
* getCenterX(): double |
23+
* setTopLeftY(newY:int) :void |
24+
* getCenterY(): double |
2525
* getPerimeter() |
2626
* getArea() : double |
2727
* |

ch_09/exercise09_11/LinearEquation.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
* getE(): void |
2222
* getF(): void |
2323
* isSolvable(): boolean |
24-
* getX(): double |
25-
* getY(): double |
24+
* getCenterX(): double |
25+
* getCenterY(): double |
2626
* |
2727
*______________________________________________________________________________*/
2828

@@ -43,7 +43,7 @@
4343
* A method named isSolvable() that returns true if ad minus bc is not 0.
4444
* <p>
4545
* <p>
46-
* Methods getX() and getY() that return the solution for the equation.
46+
* Methods getCenterX() and getCenterY() that return the solution for the equation.
4747
* <p>
4848
* Draw the UML diagram for the class and then implement the class.
4949
*/

ch_10/exercise10_04/MyPoint.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
* +distance(int,int):double |
1717
* |
1818
* |
19-
* +getX() : int |
19+
* +getCenterX() : int |
2020
* |
21-
* +getY() : int |
21+
* +getCenterY() : int |
2222
* |
2323
* |
2424
*__________________________________________________________________| */
+219
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
package ch_16.exercise16_09;
2+
3+
import javafx.application.Application;
4+
import javafx.geometry.Pos;
5+
import javafx.scene.Scene;
6+
import javafx.scene.control.Button;
7+
import javafx.scene.control.Label;
8+
import javafx.scene.control.TextField;
9+
import javafx.scene.layout.GridPane;
10+
import javafx.scene.layout.HBox;
11+
import javafx.scene.layout.Pane;
12+
import javafx.scene.layout.VBox;
13+
import javafx.scene.paint.Color;
14+
import javafx.scene.shape.Rectangle;
15+
import javafx.scene.text.Text;
16+
import javafx.stage.Stage;
17+
18+
/**
19+
* **16.9 (Geometry: two rectangles intersect?) Write a program that enables the user to
20+
* specify the location and size of the rectangles and displays whether the two rectangles intersect,
21+
* as shown in Figure 16.39b. Enable the user to point the mouse
22+
* inside a rectangle and drag it. As the rectangle is being dragged, the rectangle’s
23+
* center coordinates in the text fields are updated.
24+
*/
25+
public class Exercise16_09 extends Application {
26+
private RectangleExt rectangle1;
27+
private RectangleExt rectangle2;
28+
private Rectangle layoutRect;
29+
private Pane drawPane;
30+
31+
private TextField r1centerXTextField;
32+
private TextField r1centerYTextField;
33+
private TextField r1WidthTextField;
34+
private TextField r1HeightTextField;
35+
private TextField r2centerXTextField;
36+
private TextField r2centerYTextField;
37+
private TextField r2WidthTextField;
38+
private TextField r2HeightTextField;
39+
40+
@Override
41+
public void start(Stage primaryStage) {
42+
layoutRect = new Rectangle(0, 0, 250, 110);
43+
layoutRect.setStroke(Color.WHITE);
44+
layoutRect.setFill(Color.WHITE);
45+
rectangle1 = new RectangleExt(52.0, 60.0, Color.WHITE);
46+
rectangle1.setTopLeft(new Pt(200, 10));
47+
rectangle1.setStroke(Color.BLACK);
48+
rectangle2 = new RectangleExt(80.0, 56.0, Color.WHITE);
49+
rectangle2.setStroke(Color.BLACK);
50+
rectangle2.setTopLeft(new Pt(60, 10));
51+
52+
drawPane = new Pane(layoutRect, rectangle1, rectangle2);
53+
r1centerXTextField = new TextField();
54+
r2centerXTextField = new TextField();
55+
r1centerYTextField = new TextField();
56+
r2centerYTextField = new TextField();
57+
r1WidthTextField = new TextField();
58+
r1HeightTextField = new TextField();
59+
r2WidthTextField = new TextField();
60+
r2HeightTextField = new TextField();
61+
r1centerXTextField.setPrefColumnCount(3);
62+
r1centerYTextField.setPrefColumnCount(3);
63+
r1HeightTextField.setPrefColumnCount(3);
64+
r2centerXTextField.setPrefColumnCount(3);
65+
r2centerYTextField.setPrefColumnCount(3);
66+
r2WidthTextField.setPrefColumnCount(3);
67+
68+
69+
r1centerXTextField.setText(String.valueOf(rectangle1.getCenter().getX()));
70+
r1centerYTextField.setText(String.valueOf(rectangle1.getCenter().getY()));
71+
r1WidthTextField.setText(String.valueOf(rectangle1.getWidth()));
72+
r1HeightTextField.setText(String.valueOf(rectangle1.getHeight()));
73+
74+
r2centerXTextField.setText(String.valueOf(rectangle2.getCenter().getX()));
75+
r2centerYTextField.setText(String.valueOf(rectangle2.getCenter().getY()));
76+
r2WidthTextField.setText(String.valueOf(rectangle2.getWidth()));
77+
r2HeightTextField.setText(String.valueOf(rectangle2.getHeight()));
78+
79+
VBox paneForTable1 = getInputGrid(r1centerXTextField,
80+
r1centerYTextField, r1WidthTextField, r1HeightTextField, 1);
81+
82+
VBox paneForTable2 = getInputGrid(r2centerXTextField,
83+
r2centerYTextField, r2WidthTextField, r2HeightTextField, 2);
84+
85+
HBox paneForTables = new HBox(5);
86+
paneForTables.setAlignment(Pos.CENTER);
87+
paneForTables.getChildren().addAll(paneForTable1, paneForTable2);
88+
Button redrawButton = new Button("Redraw Rectangles");
89+
VBox vBox = new VBox();
90+
vBox.setAlignment(Pos.CENTER);
91+
vBox.getChildren().addAll(intersect(), drawPane,
92+
paneForTables, redrawButton);
93+
redrawButton.setOnAction(e -> {
94+
draw();
95+
vBox.getChildren().remove(0);
96+
vBox.getChildren().add(0, intersect());
97+
});
98+
99+
rectangle1.setOnMouseDragged(e -> {
100+
rectangle1.setTopLeft(new Pt(e.getX(), e.getY()));
101+
r1centerXTextField.setText(String.valueOf(rectangle1.getCenter().getX()));
102+
r1centerYTextField.setText(String.valueOf(rectangle1.getCenter().getY()));
103+
vBox.getChildren().remove(0);
104+
vBox.getChildren().add(0, intersect());
105+
});
106+
107+
rectangle2.setOnMouseDragged(e -> {
108+
rectangle2.setTopLeft(new Pt(e.getX(), e.getY()));
109+
r2centerXTextField.setText(String.valueOf(rectangle2.getCenter().getX()));
110+
r2centerYTextField.setText(String.valueOf(rectangle2.getCenter().getY()));
111+
vBox.getChildren().remove(0);
112+
vBox.getChildren().add(0, intersect());
113+
114+
});
115+
116+
Scene scene = new Scene(vBox);
117+
primaryStage.setTitle(getClass().getName());
118+
primaryStage.setScene(scene);
119+
primaryStage.show();
120+
121+
vBox.widthProperty().addListener(ov ->
122+
layoutRect.widthProperty().bind(vBox.widthProperty())
123+
);
124+
125+
vBox.heightProperty().addListener(ov ->
126+
layoutRect.heightProperty().bind(vBox.heightProperty().multiply(0.5))
127+
);
128+
129+
vBox.heightProperty().addListener(ov ->
130+
layoutRect.heightProperty().bind(vBox.heightProperty().multiply(0.5))
131+
);
132+
133+
layoutRect.setWidth(vBox.getWidth());
134+
layoutRect.setHeight(vBox.getHeight());
135+
136+
137+
}
138+
139+
140+
private Text intersect() {
141+
return new Text("Two rectangles intersect? " + checkIntersection());
142+
}
143+
144+
145+
String checkIntersection() {
146+
if (rectangle1.overlaps(rectangle2)) {
147+
return "Yes";
148+
}
149+
150+
return "No";
151+
}
152+
153+
protected VBox getInputGrid(
154+
TextField x,
155+
TextField y,
156+
TextField w,
157+
TextField h,
158+
int n) {
159+
VBox vBox = new VBox(1);
160+
GridPane gridPane = new GridPane();
161+
gridPane.setHgap(5);
162+
gridPane.setVgap(5);
163+
gridPane.add(new Label("Center X:"), 0, 0);
164+
gridPane.add(x, 1, 0);
165+
gridPane.add(new Label("Center Y:"), 0, 1);
166+
gridPane.add(y, 1, 1);
167+
gridPane.add(new Label("Width:"), 0, 2);
168+
gridPane.add(w, 1, 2);
169+
gridPane.add(new Label("Height:"), 0, 3);
170+
gridPane.add(h, 1, 3);
171+
vBox.getChildren().addAll(new Label("Enter rectangle " +
172+
n + " info:"), gridPane);
173+
return vBox;
174+
}
175+
176+
private void draw() {
177+
double x1 = Double.parseDouble(r1centerXTextField.getText());
178+
if (x1 != rectangle1.getCenter().getX()) {
179+
rectangle1.setCenter(new Pt(x1, rectangle1.getCenter().getY()));
180+
}
181+
182+
double y1 = Double.parseDouble(r1centerYTextField.getText());
183+
if (y1 != rectangle1.getCenter().getY()) {
184+
rectangle1.setCenter(new Pt(rectangle1.getCenter().getX(), y1));
185+
}
186+
187+
double x2 = Double.parseDouble(r2centerXTextField.getText());
188+
if (x2 != rectangle2.getCenter().getX()) {
189+
rectangle2.setCenter(new Pt(x2, rectangle2.getCenter().getY()));
190+
}
191+
192+
double y2 = Double.parseDouble(r2centerYTextField.getText());
193+
if (y2 != rectangle2.getCenter().getY()) {
194+
rectangle2.setCenter(new Pt(rectangle2.getCenter().getX(), y2));
195+
}
196+
197+
double h1 = Double.parseDouble(r1HeightTextField.getText());
198+
if (h1 != rectangle1.getHeight()) {
199+
rectangle1.setHeight(h1);
200+
}
201+
202+
double w1 = Double.parseDouble(r1WidthTextField.getText());
203+
if (w1 != rectangle1.getWidth()) {
204+
rectangle1.setWidth(w1);
205+
}
206+
207+
double w2 = Double.parseDouble(r2WidthTextField.getText());
208+
if (w2 != rectangle2.getWidth()) {
209+
rectangle2.setWidth(w2);
210+
}
211+
212+
double h2 = Double.parseDouble(r2HeightTextField.getText());
213+
if (h2 != rectangle2.getHeight()) {
214+
rectangle2.setHeight(h2);
215+
}
216+
217+
218+
}
219+
}
+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package ch_16.exercise16_09;
2+
3+
4+
import javafx.scene.text.Text;
5+
6+
public interface Intersectable {
7+
Text intersect();
8+
}

ch_16/exercise16_09/Pt.java

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package ch_16.exercise16_09;
2+
3+
4+
public class Pt {
5+
private double x;
6+
private double y;
7+
8+
public Pt() {
9+
x = 0;
10+
y = 0;
11+
}
12+
13+
public Pt(double x, double y) {
14+
this.x = x;
15+
this.y = y;
16+
}
17+
18+
public double distance(Pt point) {
19+
return distance(point.x, point.y);
20+
21+
}
22+
23+
public double distance(double x, double y) {
24+
return Math.sqrt(Math.pow(this.x - x, 2) + Math.pow(this.y - y, 2));
25+
}
26+
27+
public double getX() {
28+
return x;
29+
}
30+
31+
public double getY() {
32+
return y;
33+
}
34+
35+
public void setX(double x) {
36+
this.x = x;
37+
}
38+
39+
public void setY(double y) {
40+
this.y = y;
41+
}
42+
}

0 commit comments

Comments
 (0)