LINUX.ORG.RU

Сообщения xterro

 

FLTK не могу понять, как работает resize ?

Доброго времени суток, кто работал с FLTK, растолкуйте на пальцах, как работает resize? Не могу понять, а мануал на сайте какой-то куцый :( Значит, у меня окно, на котором лежит, меню, два скроллбара и табы. Ресайзю окошко, но вместе с ним, изменяется размер табов и нижнего скроллбара + вложженый в таб GL_Window тоже не до конца растягивается.

#include <FL/Fl.H>
#include <FL/Fl_Gl_Window.H>
#include <FL/Fl_Scroll.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Menu_Bar.H>
#include <FL/Fl_Tabs.H>
#include <FL/Fl_Double_Window.H>
#include <FL/gl.h>


#define CLIENT_WIDTH 1024
#define CLIENT_HEIGHT 700
#define SCROLL_SIZE 16
#define MENUBAR_SIZE 24

extern int FL_NORMAL_SIZE;

class MyGlWindow : public Fl_Gl_Window {
    // DRAW METHOD
    //      OpenGL window: (w,h) is upper right, (-w,-h) is lower left, (0,0) is center
    //
    void draw() {
        // First time? init viewport, etc.
        if (!valid()) {
            valid(1);
            glLoadIdentity();
            glViewport(0,0,w(),h());
            glOrtho(0, w(), 0, h(), -1, 1);
        }

        glClearColor(0.916, 0.928, 0.948, 0.0);
        glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
        // Draw white 'X'
        glColor3f(0.0, 0.0, 0.0);
        glBegin(GL_QUADS);
            glVertex2f(10, 10);
            glVertex2f(10, 30);
            glVertex2f(30, 30);
            glVertex2f(30, 10);
        glEnd();

        glBegin(GL_LINE_STRIP); glVertex2f(100, 100); glVertex2f(200,150); glEnd();
    }

    void resize(int X,int Y,int W,int H) {
        Fl_Gl_Window::resize(X,Y,W,H);
        glLoadIdentity();
        glViewport(0,0,W,H);
        glOrtho(0,W,0,H,-1,1);
        redraw();
    }
public:
    // CONSTRUCTOR
    MyGlWindow(int X,int Y,int W,int H,const char*L=0)
        : Fl_Gl_Window(X,Y,W,H,L) {
            box(FL_DOWN_BOX);
    }
};


// MAIN
int main() {
    Fl::scheme("gtk+");
    FL_NORMAL_SIZE = 12;
    Fl_Window win(CLIENT_WIDTH, CLIENT_HEIGHT, "OpenGL X");
    Fl_Menu_Bar* menu = new Fl_Menu_Bar(0, 0, CLIENT_WIDTH, MENUBAR_SIZE);
    menu->label("AAA");
    menu->add("&File/&Open",  "^o", NULL);
    menu->add("&File/&Save",  "^s", NULL, 0, FL_MENU_DIVIDER);
    menu->add("&File/&Preferences",  "^q", NULL, 0, FL_MENU_DIVIDER);
    menu->add("&File/&Quit",  "^q", NULL);

    menu->add("&Edit/&Cut",  "^c", NULL);
    menu->add("&Edit/&Copy",  "^co", NULL);
    menu->add("&Edit/&Paste",  "^p", NULL, 0, FL_MENU_DIVIDER);
    menu->add("&Edit/&Rotate",  "^p", NULL);

    menu->add("&View/Zoom In",  "^zi", NULL);
    menu->add("&View/Zoom Out",  "^zo", NULL);
    menu->add("&View/Fit size",  "^f", NULL, 0, FL_MENU_DIVIDER);
    menu->add("&View/Grid enable",  "^zo", NULL, 0, FL_MENU_TOGGLE);
    menu->add("&View/Grid size",  "^zo", NULL,0, FL_MENU_DIVIDER | FL_SUBMENU );
    menu->add("&View/Add view",  "^zi", NULL);
    menu->add("&View/Close current view",  "^zi", NULL);

    menu->add("&Draw/&Line",  "Ctrl+F6", NULL);
    menu->add("&Draw/&Rectangle",  "^F2", NULL);
    menu->add("&Draw/&Circle",  "^F3", NULL);
    menu->add("&Draw/&Arc",  "^F4", NULL);
    menu->add("&Draw/&Polygon",  "^F5", NULL);
    menu->add("&Draw/&Text",  "^F6", NULL);

    /* add submenu */
    for ( int t=0; t<menu->size(); t++ ) {                // walk array of items
        Fl_Menu_Item *item = (Fl_Menu_Item*)&(menu->menu()[t]);       // get each item
        printf("item name: %s\n", item->label());
        if(item->submenu()) {
            if(strcmp(item->label(), "Grid size") == 0) {
               // item.add("aaa",  "Ctrl+F6", NULL);
              //  item.add("bbb", 0, NULL, NULL);
              //item->labelcolor(fl_rgb_color(200, 0, 0));
               //item->labelfont(FL_ITALIC | FL_BOLD);

               //item->add("AAA", "", NULL,0, FL_SUBMENU_POINTER);
// подменю - отдельная песня, хз как правильно добавлять
               menu->add("&View/Grid size/0.24 mm ",  "", NULL);
               menu->add("&View/Grid size/0.5 mm ",  "", NULL);
               menu->add("&View/Grid size/1 mm",  "", NULL);
               menu->add("&View/Grid size/2 mm ",  "", NULL);
               menu->add("&View/Grid size/10 mm ",  "", NULL);

            }
        }
    }


    Fl_Tabs *tabs = new Fl_Tabs(0, MENUBAR_SIZE, CLIENT_WIDTH-SCROLL_SIZE, CLIENT_HEIGHT-SCROLL_SIZE);
    tabs->selection_color(fl_rgb_color(162 , 169, 175));
        Fl_Group group1(0, MENUBAR_SIZE*2, CLIENT_WIDTH-SCROLL_SIZE, CLIENT_HEIGHT-SCROLL_SIZE, "Super group 1");
            MyGlWindow mygl(0, MENUBAR_SIZE*2+5, CLIENT_WIDTH-SCROLL_SIZE, CLIENT_HEIGHT-SCROLL_SIZE-MENUBAR_SIZE*2-5);
        group1.end();
       // group1.resizable(mygl);
    tabs->end();

     // MyGlWindow mygl(0, 0, win.w(), win.h());
     Fl_Scrollbar vscroll(CLIENT_WIDTH-SCROLL_SIZE, MENUBAR_SIZE, SCROLL_SIZE, CLIENT_HEIGHT-SCROLL_SIZE-MENUBAR_SIZE);
     Fl_Scrollbar hscroll(0, CLIENT_HEIGHT-SCROLL_SIZE, CLIENT_WIDTH-SCROLL_SIZE, SCROLL_SIZE);
     hscroll.type(FL_HORIZONTAL);
     hscroll.slider_size(0.5);

     win.end();
     win.resizable(tabs);
     win.show();
     return(Fl::run());
}

Система ресайза вроде как гибкая, но постичь дзен я пока не смог :(

xterro
()

OpenGL изменить размер viewporta, не меняя размер нарисованного, запутался :(

Доброго времени суток, что-то я малость запутался, в таком вопросе: как сделать так, чтобы при изменении размеров viewport-а, размер нарисованной картинки не менялся?

Код стандартный:

void resize(int X,int Y,int W,int H) {
    Fl_Gl_Window::resize(X,Y,W,H);
    glLoadIdentity();
    glViewport(0,0,W,H);
    glOrtho(0,W,0,H,-1,1);
    redraw();
}

void draw() {
        // First time? init viewport, etc.
        if (!valid()) {
            valid(1);
            glLoadIdentity();
            glViewport(0,0,w(),h());
            glOrtho(0, w(),0,h(),-1,1);
        }
        // Clear screen
        glClear(GL_COLOR_BUFFER_BIT);
        // Draw white 'X'
        glColor3f(1.0, 1.0, 1.0);
        glBegin(GL_LINE_STRIP); glVertex2f(w(), h()/2); glVertex2f(-w(),-h()); glEnd();
        // хотя не так важно что рисовать, при изменении размеров viewport-а, картинка растягивается/сжимается
}

Может надо вводить какой-нибудь поправочный коэффициент, типа aspectratio(отношение сторон окна) и при отрисовке умножать на него?

xterro
()

OpenTK Monodevelop, не пойму, как накинуть GLControl на форму :(

Приветствую, тыкаю OpenTK в Monodevelop, но не пойму, как положить сам контрол на форму. Dll-ки OpenTK в связи проекта подключил, попытался добавить контрол в палитру, выбрал Добавить Контрол(зелёный плюсик вверху панели контролов), жмякнул на кнопку, Добавить сборку, указал Dll-ку OpenTK.GLControl, но говорит мол это не сборка. Или нужно полностью, всё окно наследовать от ихнего GameWindow и уже его методами играться? :(

xterro
()

Кто-нибудь пробовать использовать Eclipse RCP?

Приветствую, пытаюсь по мануалу http://habrahabr.ru/post/139340/ создать примерчик, но что-то не получается, а именно, добавляю вид, но вкладка вида не появляется в результирующем приложении. Что самое интересное, попробовал пставить сообщение на функцию инициализации перспективы createInitialLayout(), сообщение вообще не появляется, т.е эта функция не вызывается. В чём может быть причина?

xterro
()

Господа электронщики: Так всё таки от + к - или от - к + ?

Приветствую, есть тут электронщики? помогите мне преодолеть когнитивный диссонанс, никак не могу понять, как же течёт ток в схемах, от + к - или от - к +. Сейчас берём металлический проводник, т.е обычные провода. Вот электроны, они отрицательно заряжены, соответственно они «текут» от - к +, как тогда получается, приняли так, что ток течёт от + к - (Вот взяли так и против законов физики приняли). Не понимаю. Объясните мне на пальцах/яблочках/пирожках/Васях... на чём угодно, хочу для себя понять. Прочитал уже материалов разных, а догнать не могу, ну не укладывается в голове :(

xterro
()

Собираю отзывы о FOX Toolkit, как оно?

Приветствую, собственно сабж, для себя, во имя расширения кругозора и наличия неистового желания потыкать его палочкой, но заранее хочется знать мнение других людей. Кто пользовался, как со стабильностью, скоростью, нативностью вида в линуксе? Как по сравнению с кажем с wxWidgets(с Qt наверно нет смысла сравнивать, как попу с пальцем). В общем всем бобра :)

xterro
()

OpenGL + TkInter , не могу найти пример, потыкайте носом

Приветствую, для прототипирования одлной поделки, хочу использовать Python + Tkinter, а также заюзать в этой связке OpenGL(т.е обычный фрейм в сулбаром и меню, сбоку панелька, во фрейме opengl-widget), но не могу найти толком примеров. Нашёл где полностью всё окно идёт под отрисовку, а как сделать меню, бары и прочая прочая?

xterro
()

Cи. Что это за «фокус»?

Приветствую, читая статью на вики про термопары, наткнулся на пример кода:

float GetPt100Temperature(float r)
{
    float const Pt100[] = { 	80.31,	 82.29,  84.27,	 86.25,	 88.22,	 90.19,	 92.16,	 94.12,	 96.09,	 98.04,
                                100,	101.95,	103.9,	105.85,	107.79,	109.73,	111.67,	113.61,	115.54,	117.47,
                                119.4,	121.32,	123.24,	125.16,	127.07,	128.98,	130.89,	132.8,	134.7,	136.6,
                                138.5,	140.39,	142.29,	157.31,	175.84,	195.84};
    int t = -50, i, dt = 0;
    if (r > Pt100[i = 0])
      while (250 > t) {
        dt = (t < 110) ? 5 : (t > 150) ? 50 : 40;
        if (r < Pt100[++i])
          return t + (r - Pt100[i-1]) * dt / (Pt100[i] - Pt100[i-1]);
        t += dt;
      };
 
    return t;
}

привлекла моё внимание строчка:

if (r > Pt100[i = 0])
Собственно, что это такое (i=0)? просто Pt100(i) я бы понял. Инициализация переменной что-ли? О_о

xterro
()

Mono GTK# vs. PyGTK Что православней и больше доставляет?

Приветствую, интересуют сравнение Mono GTK# и PyGTK. Что удобней, быстрей в работе/разработке, менее падучее, кросплатформенней/стабильно ли работает под разными ОСями. особенно у кого был опыт, того и другого.

xterro
()

python, как выводить на экран свойства в том порядке, в котором они определены?

Приветствую, есть ситуация, пример:

class Line:
    def __init__(self):
        self.properties = {"x1":0, "y1":0, "x2":0, "y2":0, "thickness":1, "color":"#ff0000"}

# далее где-нибудь в коде:
for p in self.properties:
    print(p)

'''
на выходе имеем нечто типа:
y2
color
thickness
x2
y1
x1
'''

Что явно не доставляет, нужен вывод в том же порядке, в котором он определён(x1, y1, x2, y2...), возможно ли, как?

 ,

xterro
()

PyGTK, scrolled window, так и должно быть?

Приветствую, экспериментирую с PyGTK, но получается какая-то ерунда, так и должно быть? Откуда такие зазоры возле скрол-баров и почему статус-бар тоже закрашивается? http://i33.fastpic.ru/big/2014/0209/bb/2e29077b77a132927af76fda1c987ebb.png

вот код:

import gtk
import 
class PyApp(gtk.Window):

    def __init__(self):
        super(PyApp, self).__init__()

        self.set_title("example")
        self.set_size_request(800, 600)
        self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(35000, 35000, 35000))
        self.set_position(gtk.WIN_POS_
        # --- Main menu ---
        mb = gtk.MenuBar()

        filemenu = gtk.Menu()
        filem = gtk.MenuItem("_File")
        filem.set_submenu(filemenu)

        agr = gtk.AccelGroup()
        self.add_accel_group(agr)

        newi = gtk.ImageMenuItem(gtk.STOCK_NEW, agr)
        key, mod = gtk.accelerator_parse("<Control>N")
        newi.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
        filemenu.append(newi)

        openm = gtk.ImageMenuItem(gtk.STOCK_OPEN, agr)
        key, mod = gtk.accelerator_parse("<Control>O")
        openm.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
        filemenu.append(openm)

        sep = gtk.SeparatorMenuItem()
        filemenu.append(sep)

        exit = gtk.ImageMenuItem(gtk.STOCK_QUIT, agr)
        key, mod = gtk.accelerator_parse("<Control>Q")
        exit.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
        exit.connect("activate", gtk.main_quit)
        filemenu.append(exit)
        mb.append(filem)

        # --- Scrolled window ---
        scrolled_window = gtk.ScrolledWindow()
        scrolled_window.set_policy(gtk.POLICY_ALWAYS, gtk.POLICY_ALWAYS)

        # --- Drawing area ---
        darea = gtk.DrawingArea()
        darea.connect("expose-event", self.expose)
        scrolled_window.add_with_viewport(darea)

        # --- Status bar
        status_bar = gtk.Statusbar()
        status_bar.push(0, "example")

        vbox = gtk.VBox(False, 0)
        vbox.pack_start(mb, False, False, 0)
        vbox.pack_start(scrolled_window, True, True, 0)
        vbox.pack_start(status_bar, False, False, 0)

        self.add(vbox)
        self.connect("destroy", gtk.main_quit)
        self.show_all()

    def expose(self, widget, event):
        cr = widget.window.cairo_create()
        cr.set_source_rgb(0.6, 0.6, 0.6)
        cr.rectangle(20, 20, 120, 80)
        cr.rectangle(180, 20, 80, 80)
        cr.fill()
        cr.arc(330, 60, 40, 0, 2*math.pi)
        cr.fill()
        cr.arc(90, 160, 40, math.pi/4, math.pi)
        cr.fill()
        cr.translate(220, 180)
        cr.scale(1, 0.7)
        cr.arc(0, 0, 50, 0, 2*math.pi)
        cr.fill()

def main():
    gtk.main()
    return 0

if __name__ == "__main__":
    PyApp()
    main()

xterro
()

Вопросик спецам по Tkinter - Как переместить указатель мыши на определённые координаты?

Приветствую, наверняка есть бородатые дядьки, которые на tkinter собаку съели. Интересует вопрос, как в tkinter установить позицию курсора? Конкретно нужно установить курсор на позицию x, y на канве. А ещё конкретнее, нужно, чтобы курсор прыгал по узлам «сетки» при передвижении мыши. Накидайте примеров, ибо судя по гуглю, это почти что не возможно. :(

 ,

xterro
()

System D vs. Upstart откуда столько слюней, вот не пофиг ли что использовать?

Собственно сабж. Читаю ветку обсуждения сабжа на opennet.ru и не могу понять, вот ли не пофиг кто что использует, главное что загружается и работает, или я чего-то не понимаю. Зачем меряться пиписьками и брызгать слюной, что лучше? Объясните мне неразумному ))

 , ,

xterro
()

Python Tkinter, киньте примером собственного виджета

Приветствую, насколько понял, тут есть группа людей, которым доставляет Tkinter. Поэтому хочу попросить накидать примеров создания своего виджета, а именно, интересует ListBox не только с текстом, а чтобы текст с картинкой(или со своими каракулями - хочу понять, как рисовать на элементе списка) :)

 ,

xterro
()

Рисование КАК в PCB, как рисовать или какие алгоритмы нужно применять?

Приветствую, сразу для примера приведу картинку http://wiki.altium.com/download/thumbnails/3080231/SamplePolygonSolid.png?ver...

Здесь у нас нарисован полигон(на нём еще один полигон -прямоугольник), дорожка на нём и пару отверстий. Может это будет странно звучать, но интересует собственно: как такое нарисовать? Не могу понять, как нарисовать скажем отверстие и пустоту вокруг него(зазор), или тоже самое с линией, как оставлять пустое место вокруг них? Наверно здесь нужно использовать какие-то алгоритмы(какие?), или делать свой алгоритм заливки полигона, чтобы он заливал не всё, а огибал линии, отверстия и другие полигоны. Как такое делается, какие инструменты/алгоритмы применять, объясните на пальцах :)

xterro
()

Зачем нужна триангуляция полигона?

Приветствую, объясните на пальцах, зачем нужна триангуляция полигона? например, есть у меня полигон, провёл я над ним скажем триангуляцию Делоне, получил кучу треугольников, а что дальше с этим хозяйством делать? Для чего оно применяется?

 ,

xterro
()

AVR ISP китайский программатор, как завести?

Приветствую, приобрёл себе значит китайский программатор с aliexpress, вот такой: http://www.aliexpress.com/item/Free-driver-USBASP-ISP-USBASP-USBISP-aluminum-... Воткнул его в комп, dmesg мне весело показал что у него есть:

[ 2597.780102] usb 3-2: new low speed USB device number 2 using ohci_hcd
[ 2597.952186] usb 3-2: New USB device found, idVendor=03eb, idProduct=c8b4
[ 2597.952189] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 2597.952191] usb 3-2: Product: USBHID
[ 2597.952192] usb 3-2: Manufacturer: zhifengsoft
[ 2597.978533] generic-usb 0003:03EB:C8B4.0004: hiddev0,hidraw3: USB HID v1.01 Device [zhifengsoft USBHID] on usb-0000:00:13.0-2/input0
В /dev/usb появилось устройство hiddev0, и что собственно с этим добром делать теперь? Где /dev/ttyUSB0? который я ожидал увидеть? например, у меня есть ещё один программатор USBASP, так вот, его втыкаешь в комп, даёшь команду на прошивку
avrdude -p m328p -c avrisp -P /dev/ttyUSB0 -U flash:w:PWM.hex
всё работает, с этим же ругается, мол /dev/ttyUSB0 не найден(avrdude: ser_open(): can't open device «/dev/ttyUSB0»: No such file or directory ), хотя формально этого устройства(ttyUSB0) нет ни в первом ни во втором случае. Куда покопать?

xterro
()

CADы как в программах устроен механизм масштабирования и скроллинга?

Доброго времени суток, заранее извиняюсь если немного сумбурно определил тему, просто пока ещё сам не могу её точно сформулировать, ибо она состоит из кучки маленьких вопросов «как» и «почему» и целостной картины в моей голове пока не имеет. В попытке собрать всё воедино и понять, что да как, создаю эту тему. Если кто разрабатывал подобные приложения, прошу поделиться опытом :)

Итак, пытаюсь понять, как устроены программы типа CAD-ов(в плане вывода на экран), в которых приходится что-либо рисовать. Например, программы для рисования электрических схем, или каких либо планов домов и.т.д. Интересует в них следующее: как в них реализуется масштабирование и скроллинг. Если с масштабированием более-менее понятно, т.е взяли все размеры и координаты, помножили на некоторое число(scale factor), получили новые размеры и координаты, отрисовали и вот вроде бы всё стало другого размера. То со скроллингом есть несколько вопросов:

  • Как работает скроллинг: у нас есть некоторое виртуальное окно и окно, которое мы видим на экране(например Frame). Если виртуальное окно больше клиентской части фрейма, то появляются скроллбары. Так? Теперь вопрос, в каких единицах обычно задаётся размер виртуального окна и по какому принципу этот размер выбирается? Т.е этот размер может быть бесконечным, или он привязывается, скажем, к размеру листа A4(3,2,1,0), переведённому в единицы измерения размеров вирт. окна?
  • При скроллинге, когда пользователь дёргает за скроллбар, картинка должна проскроллиться на некоторую величину, как обычно вычисляется эта величина или просто от фонаря задаётся(задали наобум, скажем 10 пикселей)?
  • Какую систему координат обычно применяют в таких программах и откуда вести отсчёт координат? Т.е брать ли мне центр начала координат в центре экрана, или это должен быть верхний левый угол экрана? Правильно ли, что окно на экране(Frame), который «плавает» по виртуальному окну, также имеет свои координаты, которые как раз и отсчитываются от верхнего левого угла вирт. окна?
  • Я так понимаю, что когда человек в этой программе рисует что-то, то всё рисование вычисление должно вестись в каких-то внутренних единицах, которые потом переводятся в реальные единицы устройства, на которые картинка выводится, правильно? Что обычно берётся за внутреннюю единицу и как переводится в единицы устройства?

В данном вопросе я сознательно дистанцировался от указания конкретно фреймворка/библиотеки или ЯП, потому как думаю, что в граф. приложениях принцип идентичен везде, независимо от инструментария. Если нужна конкретика, то я ориентируюсь на wxWidgets. Пока вроде всё, если появятся вопросы, буду их задавать по ходу темы :)

xterro
()

(wxScrolledWindow) Каков принцип работы с подобного рода виджетами?

Доброго времени суток, разъясните один момент, пытаюсь уложить себе в голове всё по полочкам и понять, каков принцип работы с виджетами типа scrolledWindow? Т.е у нас есть некое «большое» окно и есть «маленькое» т.е собственно видимая область окна, если видимая область окна меньше «большого», то появляются полосы прокрутки, так? Если так, то по какому принципу задаётся размер «большого» окна(наверняка инициализируется при старте программы, скажем сразу установили 1000 на 1000 пикселей)? Как быть с координатами в таком виджете? Да и вообще, если я скажем задам координаты 10, 10, это будет координата «большого» окна или «маленького»?

xterro
()

Какой структурой представить полигон?

Доброго времени суток, интересует такой вопрос, как можно представить структуру полигона? Есть «классический» вариант с массивом точек, но с такой структурой будут получаться разве что ломано-резанные полигоны. А как быть, если требуются скажем «круглешки-завитушки», скажем полигон в форме клеверного листа?

Т.е вот классический вид:

class Polygon {
public:
    Polygon();

    void AddVertex();
    void DeleteVertex()
    . . .
private:
    vector<Point> mVertex;
};

Все точки хранятся в векторе mVertex. тут все просто, в том числе и определение попадания точки в полигон.

Сейчас думаю сделать следующим образом, хранить в массиве не точки а сегменты. Сегмент, это отдельный класс, который представляет из себя, либо прямую, либо кривую(Безье). Как считаете, это нормальная структура для хранения, есть ли подводные камни? Т.е получается что-то типа такого:

class Segment {
public:
    Segment();
    . . .
private:
    Point P1;
    Point P2;
    Point P3;
    Point P4;
    // точки задают сегмент, используются P1 и P2  если сегмент-линия, и все 4 точки 
    // если это кривая(кубическая кривая Безье), соответсвенно полигон соединяется из 
    // таких вот сегментов, точки привязки Р1 и Р2 если это линия и Р1 и Р4 если это кривая
};

class Polygon {
public:
    Polygon();

    void AddSegment();
    void DeleteSegment()
    bool Intersect(Point p); // определение попадания точки в полигон, одна из нужнейших функций, как её реализовать?
    . . .
private:
    vector<Segment> mSegments;
    vector<Polygon> mHoles;  // "дыры" в полигоне
};

С такой структуром, более-менее можно построить практически любой полигон, но тут остаётся главный для меня вопрос, как определять попадание точки в такой полигон? Кто что скажет? Я так думаю, такой вопрос нужно задавать тем кто программирует всякие GIS, они в этой тебе должны хорошо разбираться.

xterro
()

RSS подписка на новые темы