Trong iOS, tôi đang cố xác định điểm trên hình chữ nhật được cắt bởi một đường ảo từ điểm trung tâm đến chu vi hình chữ nhật ở một góc được xác định trước.Tìm CGPoint trên hình chữ nhật UIView giao nhau bằng một đường thẳng tại một góc nhất định từ điểm giữa
Nói rằng tôi biết điểm trung tâm, kích thước hình chữ nhật và góc (bắt đầu từ 0 độ cho hướng Đông và đi ngược chiều kim đồng hồ qua 90 cho Bắc và 180 cho Tây và 270 cho Nam đến 360 độ cho phương Đông) . Tôi cần phải biết tọa độ của điểm giao nhau.
Câu trả lời toán học hơi khó hiểu (với tôi) nhưng có lẽ là chính xác tại Finding points on a rectangle at a given angle đã dẫn tôi thử mã sau đây, nhưng nó không hoạt động đúng. Câu hỏi này tương tự như câu hỏi đó, nhưng tôi đang tìm một phương pháp Objective-C/iOS đã được sửa chữa chứ không phải là một đáp ứng toán học chung.
Tôi nghĩ rằng một phần của vấn đề mã phải làm với việc sử dụng góc 0 đến 360 độ (bằng radian không có khả năng số âm), nhưng có khả năng là các vấn đề khác. Mã dưới đây chủ yếu sử dụng ký hiệu được xác định trong the answer from belisarius, bao gồm cả nỗ lực của tôi để tính điểm giao nhau cho từng khu vực được xác định tại đó.
Mã này là trong lớp con UIImageView tôi:
- (CGPoint) startingPointGivenAngleInDegrees:(double)angle {
double angleInRads = angle/180.0*M_PI;
float height = self.frame.size.height;
float width = self.frame.size.width;
float x0 = self.center.x;
float y0 = self.center.y;
// region 1
if (angleInRads >= -atan2(height, width) && angleInRads <= atan2(height, width)) {
return CGPointMake(x0 + width/2, y0 + width/2 * tan(angleInRads));
}
// region 2
if (angleInRads >= atan2(height, width) && angleInRads <= M_PI - atan2(height, width)) {
return CGPointMake(x0 + height/(2*tan(angleInRads)),y0+height/2);
}
// region 3
if (angleInRads >= M_PI - atan2(height, width) && angleInRads <= M_PI + atan2(height, width)) {
return CGPointMake(x0 - width/2, y0 + width/2 * tan(angleInRads));
}
// region 4
return CGPointMake(x0 + height/(2*tan(angleInRads)),y0-height/2);
}
Fabulous! Cảm ơn. Tôi đã có một chút rắc rối với điều này bởi vì trong trường hợp của tôi, tôi đã không nhận ra tôi phải [self.superview convertPoint: thePoint toView: self] trong lớp con UIImageview của tôi (cho những người mới đến đây). –
Câu trả lời tuyệt vời! – mrvincenzo
Tôi đang nghiên cứu mã của bạn, điều này thật tuyệt vời, cố gắng hiểu phải làm gì nếu tôi muốn xoay hình ảnh và vẫn giữ nguyên tính năng phát hiện cạnh? Có suy nghĩ gì không? – flooie