Tính khoảng cách giữa 2 điểm trong Java

Bài 1
ây dựng lớp Pointbiểu diễn các điểm trong không gian 2 chiều với các tọa độ nguyên.
Lớp Pointcũng cung cấp các thao tác hay dùng trên các điểm.
a] Khai báo lớp Pointvới các biến nguyên int x, int ylưu trữ hoành độ và tung độ của
điểm.
b] Tạo các constructor sau cho lớp Point:
- Point[int x, int y]: tạo điểm có hoành độ x, tung độ y.
- Point[]: tạo điểm ở gốc tọa độ [0, 0].
- Point[Point p]: tạo điểm ở vị trí của điểm p.
c] Khai báo biến static originbiểu diễn gốc tọa độ [0, 0].
d] Override các phương thức sau của lớp Object:
- boolean equals[Object obj]: kiểm tra xem điểm có trùng với điểm được cho.
- String toString[]: trả về chuỗi biểu diễn cho điểm dạng [x, y].
e] Tạo các getter và setter cho x, y.
f] Tạo các phương thức sau cho lớp Pointđể thực hiện các thao tác tương ứng:
- boolean isOrigin[]: kiểm tra xem điểm có phải là gốc tọa độ [0, 0].
- void move[int x, int y]: di chuyển điểm đến tọa độ mới [x, y].
- void translate[int dx, int dy]: tịnh tiến điểm theo vector tịnh tiến [dx,
dy].Điểm [x, y] sau khi tịnh tiến theo vector tịnh tiến [dx, dy] sẽ thành điểm [x+ dx, y+
dy].
- static double distance[int x1, int y1, int x2, int y2]: tính
khoảng cách giữa điểm [x1, y1] và điểm [x2, y2].

- static double distance[Point p1, Point p2]: tính khoảng cách giữa
điểm p1và p2.
- double distance[int x, int y]: tính khoảng cách từ điểm đến điểm [x, y].
- double distance[Point p]: tính khoảng cách từ điểm đến điểm p.
- double distance[double a, double b, double c]: tính khoảng cách từ
điểm đến đường thẳng có phương trình tổng quát ax + by + c = 0.

bài làm của tớ :
PHP:
public class Point { private int x; private int y; public static Point origin = new Point[];//Khai báo biến static originbiểu diễn gốc tọa độ [0, 0]. public Point[int x, int y] {//khoi tao Point co toa do xy this.x = x; this.y = y; } public Point[] {//khoi tao voi toa so 0;0 this.x = 0; this.y = 0; } public Point[Point p] {//viet ra thui hem hieu co giong y cua de bai khong this.x = p.x; this.y = p.y; } //tao Set va get cho x va y public int getX[] { return x; } public int getY[] { return y; } public void setX[int x] { this.x = x; } public void setY[int y] { this.y = y; } //Override các phương thức sau của lớp Object @Override public boolean equals[Object obj] {//ham khong lam viec Point a = new Point[x, y]; if [obj.equals[a]] { return true; } else { return false; } } @Override public String toString[] { return "[+" + this.x + "," + this.y + "]"; } //boolean isOrigin[]: kiểm tra xem điểm có phải là gốc tọa độ [0, 0]. public boolean isOrigin[] { Point a = new Point[this.x, this.y]; if [a == origin] { return true; } else { return false; } } //void move[int x, int y]: di chuyển điểm đến tọa độ mới [x, y]. public void move[int x, int y] { this.x = x; this.y = y; } //void translate[int dx, int dy]: tịnh tiến điểm theo vector tịnh tiến [dx, //dy].Điểm [x, y] sau khi tịnh tiến theo vector tịnh tiến [dx, dy] sẽ thành điểm [x+ dx, y+ //dy]. public void translate[int dx, int dy] { this.x = this.x + dx; this.y = this.y + dy; } //static double distance[int x1, int y1, int x2, int y2]: tính //khoảng cách giữa điểm [x1, y1] và điểm [x2, y2]. public static double distance[int x1, int y1, int x2, int y2] { double kc; kc = Math.sqrt[Math.pow[[x1 - x2], 2] + Math.pow[[y1 - y2], 2]]; return kc; } //static double distance[Point p1, Point p2]: tính khoảng cách giữa //điểm p1và p2. public static double distance[Point p1, Point p2] { double kc; kc = Math.sqrt[Math.pow[[p1.x - p2.x], 2] + Math.pow[[p1.y - p2.y], 2]]; return kc; } //double distance[int x, int y]: tính khoảng cách từ điểm đến điểm [x, y]. public double distance[int x, int y] { double kc; kc = Math.sqrt[Math.pow[this.x - x, 2] + Math.pow[this.y - y, 2]]; return kc; } //double distance[Point p]: tính khoảng cách từ điểm đến điểm p. public double distance[Point p] { double kc; kc = Math.sqrt[Math.pow[this.x - p.x, 2] + Math.pow[this.y - p.y, 2]]; return kc; } //double distance[double a, double b, double c]: tính khoảng cách từ //điểm đến đường thẳng có phương trình tổng quát ax + by + c = 0 public double distance[double a, double b, double c] { double kc; double _x1; _x1 = Math.sqrt[Math.pow[a, 2] + Math.pow[b, 2]]; double _x2; _x2 = Math.abs[a * this.x + b * this.y + c]; kc = _x2 / _x1; return kc; } }
ai giải thích lớp Object và cách Override các phương thức của nó
hình như nó có một câu lênh: instanceof dùng để kiểm tra nó có phải đối tượng mình cần hay không.

Cụ thể:
PHP:
Object p = new Point[120, 3]; // p = null; if [p instanceof Point] { System.out.println["true"]; } else { System.out.println["false"]; }
Kết quả là true
nhưng nếu đối tượng là null thì kết quả là false

Đối với equals[Object] bạn có thể làm như sau:
PHP:
@Override public boolean equals[Object obj] { // Nếu đúng thì kiểm tra tiếp, sai thì trả về false if [obj instanceof Point] { // ép kiểu về Point, không xảy ra ngoại lệ vì đã kiểm tra và chắc chắn nó là kiểu Point. Point p = [Point] obj; // Nếu tọa độ bằng nhau. if [this.x = p.x && this.y = p.y] { return true; } } return false; }
Có thể ép kiểu luôn ngay trong câu lênh if để cho gọn


Bảo vệ 1:
- Mày có phải là con cháu gì của dòng họ Point không?
Tôi:
- Dạ không ạ. => xéo ngay.
----
Tôi: Dạ đúng.
Bảo vệ 1: Vào gặp Bảo vệ 2!
Bảo vẹ 2: mày cao bảo nhiêu... balah..
]

Viết tay, không dùng IDE nên có thể có sai sót
g] Viết chương trình sử dụng lớp Pointtrên để giải bài toán sau:
Cho hình chữ nhật ABCDnhư hình vẽ



Tìm trên cạnh ABđiểm Mtọa độ nguyên sao cho chu vi tam giác MCDlà lớn nhất.
code của tớ
PHP:
class test1 { public static final double CD = 60; public static void main[String[] args] { int i; Point[] M = new Point[100]; double CV[] = new double[100];//khoi tao mang double voi 500 phan tu for [i = 0; i p1.getX[] ? p1.getX[] : p2.getX[]; i p1.getX[] ? p2.getX[] : p1.getX[]]; i++] { temp = new Point[i, p2.getY[]]; // Tính chu vi ptemp = Math.abs[p1.getX[] - p2.getX[]] + p1.distance[temp] + new Point[p2.getX[], p1.getY[]].distance[temp]; if [perimeter < ptemp] { MPoints[0] = temp; perimeter = ptemp; } } // Luôn cho chạy từ số nhỏ đến số lớn for [int i = p2.getX[] > p1.getX[] ? p1.getX[] : p2.getX[]; i p1.getX[] ? p2.getX[] : p1.getX[]]; i++] { temp = new Point[i, p2.getY[]]; // Tính chu vi ptemp = Math.abs[p1.getX[] - p2.getX[]] + p1.distance[temp] + new Point[p2.getX[], p1.getY[]].distance[temp]; // Xét nó có chu vi bằng không, nhưng loại bỏ trường hợp có tọa độ x bằng nhau if [perimeter == ptemp && MPoints[0].getX[] != i] { // Thêm vào mảng MPoints = addElement[MPoints, temp]; } } return MPoints; } // Thêm phần tử vào mảng. private Point[] addElement[Point[] array, Point e] { Point[] result = new Point[array.length + 1]; for [int i = 0; i < array.length; i++] { result[i] = array[i]; } result[result.length - 1] = e; return result; } }

Video liên quan

Chủ Đề