Это немного домашний вопрос, но я некоторое время шутил и не смог получить 100% точный ответ. Учитывая многоугольник, я должен найти внутренний угол любой случайной вершины в этом многоугольнике. То, что я делал, - это взятие вершины до этого и вершины после нее, а затем вычисление угла падения (скажем, я рассматриваю свою вершину как B), я делаю ребра AB и BC, затем нахожу величину каждого, затем делю скалярное произведение двух на величину каждого.
Я все еще выключен, особенно в случае, когда у меня есть векторы (0,10), (0,0), (10,0). Очевидно, что внутренний угол этого среднего вектора равен 90 градусам, но когда я вычисляю его, используя произведение на величину и точку, я получаю 45 градусов по какой-то странной причине.
Вот мой код
double dx21 = one.x - two.x;
double dx31 = one.x - three.x;
double dy21 = one.y - two.y;
double dy31 = one.y - three.y;
double m12 = Math.sqrt(dx21*dx21 + dy21*dy21);
double m13 = Math.sqrt(dx31*dx31 + dy31*dy31);
double theta = Math.acos((dx21*dx31 + dy21*dy31)/ (m12 * m13));
System.out.println(theta);
System.out.println(Math.toDegrees(theta));
Есть что-нибудь ослепительно очевидное, что я пропустил? Я пересекаю вершины против часовой стрелки, потому что так устроено множество.