Giả sử tôi có (x, y) luôn giống với điểm bắt đầu của một dòng và (x, y) thay đổi cho điểm cuối của cùng một dòng hàng. Dòng này cũng luôn dài 40px. Khi bắt đầu chương trình, dòng xuất phát theo hướng dọc (cho phép gọi 0 độ). Dựa trên đầu vào của người dùng, tôi cần dòng để vẽ lại một số độ cụ thể từ nguồn gốc của nó bằng cách chỉ thay đổi kết thúc (x, y). THỰC PHẨMVẽ một đường ở một góc cụ thể trong Java
MỘT SỐ THÊM CHO SUY NGHĨ NẾU BẠN CẦN CNTT:
tôi trong một rut cố gắng để tính toán này và làm cho nó làm việc trong Java. Tôi có thể làm cho công việc toán học tính toán điểm dựa trên chiều dài vòng cung của một đoạn đường tròn, nhưng tôi không biết cách làm cho Java làm điều đó.
Tôi nghĩ rằng nó sẽ làm việc dễ dàng hơn dựa trên góc tam giác vì tôi sẽ luôn biết chiều dài của hai cạnh của tam giác (một bên được tạo thành bởi đường dài 40px và mặt bên kia được hình thành bởi điểm bắt đầu của dòng đó và biên giới của JPanel) và góc hai dòng đó hình thành. Tuy nhiên, bộ não của tôi là mush từ cố gắng để con số nó ra. Bất kì sự trợ giúp nào đều được đánh giá cao.
UPDATE:
@casablanca đã cho tôi đi đúng hướng. Tôi đã đánh thức các chức năng của mình và đây là cách tôi làm cho nó hoạt động.
Trước hết, tôi đã không nhận ra rằng 90 độ đã thẳng lên, nhưng một khi tôi đã nhận ra rằng tôi đã thực hiện giải pháp của tôi phản ánh thực tế đó. Tôi đang vẽ đường của tôi bắt đầu từ trung tâm dưới cùng của khung hình đi ra ngoài. Vì mặt của tam giác nằm ở bên phải của màn hình khi góc của người dùng của tôi dưới 90 độ và nằm ở bên trái màn hình khi góc của người dùng của tôi lớn hơn 90 độ, tôi đã có để điều chỉnh công thức tính đến thực tế đó, vì vậy tôi có bốn phương pháp, một cho phối hợp x
ở phía bên trái của màn hình (khi góc cho người dùng lớn hơn 90 độ), một cho phối hợp y
ở bên trái của màn hình (khi người dùng cho góc lớn hơn 90 độ) và điều tương tự cho phía bên phải của màn hình khi người dùng đưa ra góc nhỏ hơn 90 độ. Các int length
trong tất cả các phương pháp là chiều dài của cạnh huyền. Cảm ơn bạn lần nữa vì đã giúp đỡ @casablanca!
public double leftSideX(double angle, int length){
double x = frameWidth/2 - (length * Math.cos(Math.toRadians(90-(Math.toDegrees(angle)-90))));
return x;
}
public double leftSideY(double angle, int length){
double y = frameHeight - (length * Math.sin(Math.toRadians(90-(Math.toDegrees(angle)-90))));
return y;
}
public double rightSideX(double angle, int length){
double x = frameWidth/2 + (length * Math.cos(angle));
return x;
}
public double rightSideY(double angle, int length){
double y = frameHeight - (length * Math.sin(angle));
return y;
}
Cũng xem xét thay đổi bối cảnh của đồ họa biến đổi, đưa ra ở đây: http://stackoverflow.com/questions/3420651 – trashgod
Bạn có thể muốn xem xét việc đóng gói này functionlity trong một lớp; ví dụ. Vector2D. Bằng cách đó bạn có thể xây dựng một Vector2D với toạ độ x và y hoặc chiều dài và góc, và cung cấp các phương thức như getMagnitude(), getAngle(), getX(), getY(), rotateClockwise (double), v.v. – Adamski
Tôi sẽ thích, nhưng tôi nghĩ rằng đó là một chút vượt quá khả năng của tôi ngay bây giờ. Nó đã cho tôi gần một ngày để tìm ra điều này :) – ubiquibacon