Как уже упоминали другие, то, что вы делаете, получает внутренний угол, который всегда меньше 180 градусов.Я предполагаю, что вы хотите, чтобы квадрант измерялся углом против часовой стрелки от одного вектора к другому.
Простой способ получить этот квадрант - это создать точечный продукт и точечный продукт и проверить знаки каждого результата..
Это работает, потому что скалярное произведение равно | A | * | B | * cos (theta), где ||означает величину, а тета - угол между А и В. Поскольку величина всегда положительна, проверяя знак результата, вы фактически проверяете знак cos (тета).
На самом деле произведение точки Perp | A |* | B | * sin (theta), поэтому, проверяя знак точки perp, вы фактически проверяете знак sin (theta).
Допустим, мы измеряем тета как угол против часовой стрелки от A до BКвадрант также измеряется тэтой.Мы можем вычислить точку и perpdot следующим образом:
Сначала вам нужно будет получить векторы A и B. A и B будут векторами от clickWheelCenter до начальной точки и от clickWheelCenter до того, что вы назвали 'point'
точка = Ax * Bx + Ay * По
perpdot = Ax * By - Ay * Bx
, затем проверьте знаки, отметив таблицу ниже.
<b>quadrant dot perpdot</b>
1 positive positive
2 negative positive
3 positive negative
4 negative negative
Опять же, проверяя знак скалярного произведения, вы фактически проверяете знак cos (тэта) и проверяя perpdot, вы проверяете знак греха (тэта).Все, что вам нужно, это набор операторов if для сравнения, если они> 0 или <0. </p>
(примечание: я быстро написал выше и не все хорошо проверил на точность, но общая идея верна)
BBitmaster