Сетка на Image
Ну т.е. есть
Хочу на этот Image натянуть сетку 100х100 "квадратиков". Никак догадаться не могу! Почему-то все закрашивается.... Я рисую Pen'ом.
У кого есть алгоритм или кусок программы... помогите, плз!
Как нарисовать сетку в Image?
Ну т.е. есть
Хочу на этот Image натянуть сетку 100х100 "квадратиков". Никак догадаться не могу! Почему-то все закрашивается.... Я рисую Pen'ом.
У кого есть алгоритм или кусок программы... помогите, плз!
Ну, ежели рисуешь Pen'ом так и цвет надо Рen'у задавать.
Image->Canvas->Pen->Color=clRed;
А так вообще вот :
double step_y = (Image1->Width-1.0)/num;
double step_x = (Image1->Height-1.0)/num;
Image1->Canvas->Pen->Color = clRed;
for( int i=0; i<=num; ++i )
{
// Горизонтальные линии
Image1->Canvas->MoveTo( 0, i* step_x );
Image1->Canvas->LineTo( Image1->Width-1, i* step_x);
// Вертикальные линии
Image1->Canvas->MoveTo( i* step_y, 0 );
Image1->Canvas->LineTo( i* step_y, Image1->Height-1 );
}
Кто-нибудь знает как это реализовать?
Я решил усложнить себе и другим жизнь... А если разбить карту не на 4хугольники, а на 6тиугольники (т.е. изобразить карту в виде сот)...
Кто-нибудь знает как это реализовать?
А в чём собственно проблема ? Прикинул на бумажке как должно выглядеть. Нарисовал пару формул и пошёл клепать всё это дело в цикле. Главное состыковать соты между собой и дело в шляпе.
А в чём собственно проблема ? Прикинул на бумажке как должно выглядеть. Нарисовал пару формул и пошёл клепать всё это дело в цикле. Главное состыковать соты между собой и дело в шляпе.
Я не прошу мне код написать, я лишь прошу сам принцип реализации помочь "написать на бумажке" ;)
Дело все в том, что немного не понятно, как ЭТО ВСЕ строится....
Я не прошу мне код написать, я лишь прошу сам принцип реализации помочь "написать на бумажке" ;)
Дело все в том, что немного не понятно, как ЭТО ВСЕ строится....
Ну вот как-то так .. в первом приближении :
{
double step_x = SideSize * 0.86602540;
double step_y = SideSize * 0.5;
canv->MoveTo( X, Y + step_y );
canv->LineTo( X, Y + step_y + SideSize );
canv->LineTo( X + step_x, Y + step_y * 2 + SideSize );
canv->LineTo( X + step_x * 2, Y + step_y + SideSize );
canv->LineTo( X + step_x * 2, Y + step_y );
canv->LineTo( X + step_x, Y );
canv->LineTo( X, Y + step_y );
}
// ----
Image1->Canvas->Pen->Color = clRed;
int SideSize = 40;
double step_x = SideSize * 0.86602540 * 2;
double step_y = SideSize * 1.5;
bool shift = false;
for( int i=0; i<Image1->Width; i += step_x )
{
for( int j=0; j<Image1->Height; j += step_y )
{
DrawHoneyComb( Image1->Canvas, i + shift*step_x/2.0, j, SideSize );
shift = !shift;
}
}
А [COLOR=red]DrawHoneyComb[/COLOR] - это Image или что?
Это функция, описанная в самом начале :)
Созданная ручками :D
Это функция, описанная в самом начале :)
Созданная ручками :D
Да! Это снова я и снова вопрос! Как закрасить эту 6тивершинную ячейку?
P.S> Я понимаю, что нужно выводить Image1->Canvas->Brush->Color=цвет_какой_захочу =))))
Код такой
{
double x = SideSize * 0.86602540;
double y = SideSize * 0.5;
Image1->Canvas->Brush->Color=clYellow;
Image1->Canvas->FillRect(Rect(X, Y + y + SideSize, X + x, Y + y * 2 + SideSize );
Image1->Canvas->FillRect(Rect(X + x * 2, Y + y + SideSize, X + x * 2, Y + y );
Image1->Canvas->FillRect(Rect(X + x, Y, X, Y + y );
}
Это пока единственная идея, которая мне пришла в голову... Но она к сожаление рисует какие-то мелкие прямоугольники (хотя я по идее собрал из 3х прямоугольников 6тиугольник).
Вопросы такие:
1) Что тут неверное
2) Как можно нарисовать всего один 6тиугольник в заданном месте. Объясняю, у нас есть сетка (на соты разбитая) и я хочу нарисовать 6тиугольник в соте с координатами например (5;5)
Для квадратта так
Image1->Canvas->Brush->Color=clYellow;
Image1->Canvas->Rectangle(10,10,40,40);
Но я никак не пойму как залить 6тиугольник, получается ерунда какая-то!!!!
Но я никак не пойму как залить 6тиугольник, получается ерунда какая-то!!!!
Я вот тоже никак не пойму, прикалываешься ты или фигней занимаешься. Как можно с серьезным лицом пытаться нарисовать многоугольник квадратами?! Вспомни курс геометрии, блин! Любой многоугольник можно представить в виде набора треугольников, но никак не квадратов. Поэтому, кстати, графические ускорители работают с треугольниками.
Теперь по делу. Метод TCanvas::Polygon() и аналогичные API-шные функции вроде до сих пор работали.
Я вот тоже никак не пойму, прикалываешься ты или фигней занимаешься. Как можно с серьезным лицом пытаться нарисовать многоугольник квадратами?! Вспомни курс геометрии, блин! Любой многоугольник можно представить в виде набора треугольников, но никак не квадратов. Поэтому, кстати, графические ускорители работают с треугольниками.
Теперь по делу. Метод TCanvas::Polygon() и аналогичные API-шные функции вроде до сих пор работали.
Спасибо за помощь, но я нашел ОТЛИЧНУЮ функцию для моей цели FloodFill!
Собсно вот сама реализация, знаете штука полезная!
{
Form1->Image1->Canvas->Brush->Color=col;
Form1->Image1->Canvas->FloodFill(x, y, clBlack, fsBorder);
}
Спасибо за помощь, но я нашел ОТЛИЧНУЮ функцию для моей цели FloodFill!
Для твоих целей, может и подходит, а по жизни - штука медленная.
Для твоих целей, может и подходит, а по жизни - штука медленная.
Да, я уже это понял! После закраски более 10 6тиугольников, прога загибается (условно говоря)...
Пробовал с полигонами - работает значительно быстрее. Спасибо за совет.