Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Здравствуйте, Ильгиз. Математика - царица наук (Карл Гаусс). Изучение математики начинается с детского сада, когда нас учат считать и выполнять простые арифметические операции. Любой, даже самый простейший алгоритм будет связан с арифметическими...
Я хотел узнать математика это обязательно в программирование. Пять лет назад просто из любопытства я увлекся HTML потом изучил CSS и JvaScript потом изучил PHP и Java. Как то не задумывался и начал смотреть форумы и узнал что без математики не...
Все верно, но так же необходимо зайти в: Компоновщик -> Ввод -> Дополнительные зависимости Здесь необходимо нажать изменить и в Дополнительные зависимости прописать это: SDL2.lib SDL2main.lib SDL2test.lib Без этого не заработает. (MVS 2015)
Спасибо за реализацию, она действительно быстрая. Но не все линии отрисовывает в нужную сторону... Необходимо добавить проверку для случая X-линии if(y1 "<" y0) grad=-grad; и аналогично для Y-линии if(x1 "<" x0) grad=-grad; P.S. На...
Отличные уроки(учу GL по ним), только в renderScene нужно добавить очистку буфера цвета и буфера глубины. При изменении размеров треугольники размножаются)

Счетчики и рейтинг

Яндекс.Метрика Рейтинг@Mail.ru
Скриншот к примеру
Среда программирования: 
IntelliJ IDEA
Статья по теме: 

Задача: Определить, принадлежит ли точка выпуклому многоугольнику.
Алгоритм: Выберем произвольную точку ( кликом мышки ).
Используя векторное произведение, проверим по очереди в порядке обхода сторон по часовой стрелке, лежит ли точка слева от очередного вектора - стороны многоугольника
( откладываем вектора: от i-й вершины к i-1-й вершине, и от i-й вершины к выбранной точке).
Если векторное произведение неотрицательно, значит точка лежит слева от стороны многоугольника, либо на стороне. Если это выполняется для каждой из сторон, то точка лежит внутри многоугольника.

Код программы: 

package sample;
 
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Annotation;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
 
public class Check {
    private int n = 6;  //количество вершин многоугольника
    private Point2D Poly[] = new Point2D[] {
        new Point2D(200, 170),
        new Point2D(320, 120),
        new Point2D(440, 170),
        new Point2D(440, 250),
        new Point2D(320, 300),
        new Point2D(200, 250),
    };
 
    //возвращает true, если точка лежит слева от прямой
    private boolean vector_mult (Point2D A, Point2D B, double click_X, double click_Y) {
        if(((B.getX()-A.getX())*(click_Y - A.getY()) - (B.getY()-A.getY())*(click_X - A.getX())) >= 0) return true;
        else return false;
    }
 
    public void DrPoly (GraphicsContext g_c) {      //отрисовка многоугольника
        for(int i = 0; i < n-1; i++) {
            g_c.strokeLine(Poly[i].getX(), Poly[i].getY(), Poly[i+1].getX(), Poly[i+1].getY());
        }
        g_c.strokeLine(Poly[n-1].getX(), Poly[n-1].getY(), Poly[0].getX(), Poly[0].getY());
    }
 
    public boolean check_attachment (double click_X, double click_Y) {  //возвращает true, если точка лежит слева от каждой прямой
        for(int i = 0; i < n-1; i++) {
            if(!vector_mult(Poly[i], Poly[i+1], click_X, click_Y)) return false;
        }
        if (vector_mult(Poly[n-1], Poly[0], click_X, click_Y)) return true;
        else return false;
    }
 
}

Прикрепленный файлРазмер
leonidchenko_pointchecker.zip19.33 кб