Я хотел бы определить, находится ли курсор в области мобильного круга/диска. Я попытался решить проблему с помощью кода ниже. Оператор if
кажется «функционирующим», так как он не сообщает об ошибке, но условие else
является единственным выходом, когда-либо напечатанным, даже когда курсор перемещается в области круга, по его окружности или через его центр ,Как определить, находится ли курсор в пределах набора вершин?
У меня, очевидно, отсутствует что-то относительно определения соответствующей области для обнаружения мыши внутри, но я не могу понять, что. Я предположил (неосведомленно), что лучшим вариантом было бы использовать координаты вершин, определенные в glVertex2f()
, но это либо явно неточно, либо я выполнил его ненадлежащим образом. Любая помощь или руководство будут оценены.
glBegin(GL_TRIANGLE_FAN);
glColor3f(1, 0, 0);
int j[5] = {100,80,60,55,50};
int z = 1;
float radius = j[z];
int xoffset = radius - (2 * radius);
int yoffset = 384;
double x1 = xoffset + radius;
double y1 = yoffset + radius * (sin(iteration));
void cursor_position_callback(GLFWwindow* w, double x, double y)
{
FILE *f = fopen("data.txt", "a");
if (cursor_x == (x1 + radius * cos(i)) && cursor_y == (y1 + radius * sin(i))){
fprintf(f,"+++%0.3f: Cursor position: %f %f (%+f %+f)\n",
glfwGetTime(),
x, y, x - cursor_x, y - cursor_y);
}
else{
fprintf(f,"---%0.3f: Cursor position: %f %f (%+f %+f)\n",
glfwGetTime(),
x, y, x - cursor_x, y - cursor_y);
}
cursor_x = x;
cursor_y = y;
fclose(f);
}
for (double i = 0; i < 2 * M_PI; i = i + ((2 * M_PI)/a))
{
glVertex2f(x1 + radius * cos(i), y1 + radius * sin(i));
glfwSetCursorPosCallback(w, cursor_position_callback);
}
iteration += 0.01;
glEnd();
glTranslatef(1.0f,0.0f,0.0f);
Вы уверены, что открываете 'FILE * f = fopen (" data.txt "," a ");' каждый раз, когда мышь перемещается, это правильный способ решить вашу проблему? – user3078414
@ user3078414 Он выглядит как отладочный код. Неэффективность обычно приемлема при работе с ошибкой. – Xirema
@ user3078414 Xirema правильный. Я пытаюсь проверить функциональность. Использовать или не использовать упомянутый код fopen или обращаясь к его эффективности/неэффективности, кажется, обходит проблему того, обнаружен ли курсор внутри вершин или нет, если вы не приближаетесь к нетипизированной мысли, которая также объясняла бы, почему она не была обнаружена , Спасибо вам за эту мысль! – zzz