SmirnoffYM / AI-simulator

2 stars 1 forks source link

Drawing robots #1

Open SmirnoffYM opened 12 years ago

SmirnoffYM commented 12 years ago

Hello everyone, буду говорити українською. Коротше, суть в тому що в Qt походу є проблема з малювання еліпсу у випадку, коли еліпс хоча б частково "вилазить" у негативні області. Наприклад, маємо точку (10, 10) і хочемо намалювати еліпс з центром в цій точці і радіусом 20. В результаті еліпс не намалюється, а QGraphicsScene розтягнеться до вражаючих розмірів. Можете перевірити це, вставивши наступний код в конструктор ModellingSystem в цикл, де створюються роботи

robot->setColor(QColor(0, 0, 255)); robot->setOrientation(359); robot->setCoords(10, 10); robot->setSize(40);

При цьому, якщо змінити розмір (тобто діаметр) з 40 на, скажімо, 10, то "робот" буде нормально промальовуватися. Аналогічно, все буде ок якщо змінити координати центру на такі, при яких робот не має вилазити за край карти. Що можна зробити: Варіант 1: тупо не промальовувати ботів, які вилазять за карту. Варіант 2(хардкорний): написати свою функцію, яка малює і зафарбовує коло. Це буде працювати, так як лінії у "від'ємних координатах" промальовуються нормально.

Minoru commented 12 years ago

Враховуючи, що у поле зору «локатора» потрапляють усі об'єкти, центри яких лежать у заданому колі, слід обирати другий варіант.

SmirnoffYM commented 12 years ago

Поки я напишу перший варіант (там треба буквально два рядка змінити), в раз чого потім поміняємо на другий.

SmirnoffYM commented 12 years ago

When I implemented drawing "visibilty circle" I draw each pixel of this circle (it was needed cuz in some cases "visibility circle" is not a real circle, for example if robot stays near map's border, he mustn't see anything outside the map, so circle must be truncated). So i decided to implement case 2 if it won't consume too much computer resources.