W iOS próbuję określić punkt na prostokącie przeciętym przez wyobrażoną linię od punktu środkowego do obwodu prostokąt o ustalonym kącie.Znaleźć punkt CGPoint na prostokącie UIView przeciętym przez linię prostą pod danym kątem od punktu środkowego
Powiedz, że znam punkt środkowy, rozmiar prostokąta i kąt (zaczynając od 0 stopni dla Wschodu i przechodząc w kierunku przeciwnym do ruchu wskazówek zegara przez 90 dla Północy i 180 dla Zachodu i 270 dla Południowego do 360 stopni dla Wschodu) . Muszę znać współrzędne punktu przecięcia.
Nieco mylące (dla mnie) matematyczne, ale prawdopodobnie dokładne odpowiedzi na Finding points on a rectangle at a given angle doprowadziły mnie do wypróbowania następującego kodu, ale nie działa poprawnie. To pytanie jest podobne do tego, ale szukam poprawionej metody Objective-C/iOS, a nie ogólnej odpowiedzi matematycznej.
Myślę, że część problemu z kodem dotyczy pojedynczego wejścia 0 do 360 stopni (w radianach bez możliwości wprowadzenia ujemnej liczby), ale prawdopodobnie wystąpią inne problemy. Poniższy kod w większości wykorzystuje notację zdefiniowaną w the answer from belisarius, w tym moją próbę obliczenia punktów przecięcia dla każdego z czterech zdefiniowanych tam regionów.
Ten kod jest w moim UIImageView podklasy:
- (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);
}
wspaniałe! Dzięki. Miałem z tym trochę kłopotu, ponieważ w moim przypadku nie zdawałem sobie sprawy, że musiałem [self.superview convertPoint: thePoint toView: self] w mojej podklasie UIImageview (dla innych nowicjuszy, którzy tu przybyli). –
Fantastyczna odpowiedź! – mrvincenzo
Czytam twój kod, który jest doskonały, próbując zrozumieć, co zrobić, jeśli chcę obrócić obraz i nadal utrzymywać wykrywanie krawędzi? jakieś pomysły? – flooie