Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2011, 15:59   #11
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

ну да, ты ведь хочеш что б она у тебя лучше виднелась
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 12.02.2011, 20:15   #12
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Вот кручу, верчу... что-то не пойму как это всё прокрутить дело. Может поможете с алгоритмической стороны на примере 2х линий ?
Arkuz вне форума Ответить с цитированием
Старый 13.02.2011, 11:31   #13
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

скинь програмку, что в график рисовала, а я координаты попробую зделать
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 14.02.2011, 03:22   #14
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

вот исходники

на первой вкладке я эксперементировал, там не правильно рисует.
Вложения
Тип файла: rar prog.rar (155.3 Кб, 5 просмотров)
Arkuz вне форума Ответить с цитированием
Старый 17.02.2011, 15:16   #15
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Найдено решение для отображения отрезка с любыми координатами:
Оси OX и OY поменяны местами. Это специально для геодезических задач.

Точка1 рисуется в координатах (0;0), а Точка2 вращается относительно первой под нужным углом.

Готовим канву:
Код:
procedure ReadyImg(Img:TImage);
var
 i:integer;
begin
 with Img do
 begin  //действительно для канвы 330x330
        //очистка канвы
        Canvas.Pen.Color:=clWhite;
        Canvas.Brush.Color:=clWhite;
        Canvas.Rectangle(0,0,330,330);
        Canvas.Refresh;

        //задаём параметры
        //рисуем сетку
        Canvas.Pen.Style:=psSolid;
        Canvas.Pen.Color:=clBlue;
        Canvas.Pen.Width:=1;
        i:=0;
        while i<>330 do
        begin
          Canvas.MoveTo(i,1);
          Canvas.LineTo(i,330);
          Canvas.MoveTo(1,i);
          Canvas.LineTo(330,i);
          i:=i+30;
        end;
        //--------------

        //отрисовка осей координат и X,Y
        Canvas.Pen.Width:=3;
        Canvas.TextOut(10,10,'X');
        Canvas.TextOut(310,310,'Y');
        Canvas.MoveTo(1,1);
        Canvas.LineTo(1,329);
        Canvas.LineTo(329,329);
        Canvas.Pen.Color:=clRed;
        //----------------
 end;
end;

Последний раз редактировалось Arkuz; 17.02.2011 в 15:38.
Arkuz вне форума Ответить с цитированием
Старый 17.02.2011, 15:38   #16
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Рисуем линию:

Код:
TPoints = record
            x:double;
            y:double;
           end;
 T2Points = record
            p1:TPoints;
            p2:TPoints;
           end;
Код:
procedure LineDraw(Img:TImage; Points:T2Points; p1Name,p2Name:string);
var
 x1,x2,y1,y2,dx,dy,t,ch,cwh,ty,tx:integer;
begin
        x1:=round(Points.p1.x);
        y1:=round(Points.p1.y);
        x2:=round(Points.p2.x);
        y2:=round(Points.p2.y);

        //переменная содержащая длину канвы
        //канва квадратная
        with Img do
        begin

        cwh:=Width;
        dx:=round(x1-x2);
        dy:=round(y1-y2);

        if abs(dx)>=abs(dy) then
         begin
          ch:=round(abs(dx)/10*2);
          t:=round(abs(dx)+ch);
         end;

        if abs(dx)<abs(dy) then
         begin
          ch:=round(abs(dy)/10*2);
          t:=round(abs(dy)+ch);
         end;

          x1:=round(cwh/2);
          y1:=round(cwh/2);

          //работает
          if (dx>0) and (dy>0) then
          begin
            x2:=round(cwh/2+(dx*(cwh/2))/t);
            y2:=round(cwh/2-(dy*(cwh/2))/t);
          end;
          //работает
          if (dx<0) and (dy>0) then
          begin
            x2:=round(cwh/2+(dx*(cwh/2))/t);
            y2:=round(cwh/2-(dy*(cwh/2))/t);
          end;
          //работает
          if (dx<0) and (dy<0) then
          begin
            x2:=round(cwh/2+(dx*(cwh/2))/t);
            y2:=round(cwh/2-(dy*(cwh/2))/t);
          end;

          //работает
          if (dx>0) and (dy<0) then
          begin
            x2:=round(cwh/2+(dx*(cwh/2))/t);
            y2:=round(cwh/2-(dy*(cwh/2))/t);
          end;
          //0 градусов
          if (dy=0) and (dx>0) then
           begin
             x1:=round(cwh/2-(dx*(cwh/2))/t);
             y1:=round(cwh/2);
             x2:=round(cwh/2);
             y2:=round(cwh/2);
           end;

           //180 градусов
           if (dy=0) and (dx<0) then
           begin
             x1:=round((dx*(cwh/2))/t);
             x1:=round(abs(x1)+cwh/2);
             y1:=round(cwh/2);
             x2:=round(cwh/2);
             y2:=round(cwh/2);
           end;

           //90 градусов
           if (dx=0) and (dy>0) then
           begin
             y2:=round(cwh/2-(dy*(cwh/2))/t);
             x2:=round(cwh/2);
             y1:=round(cwh/2);
             x1:=round(cwh/2);
           end;

           //270 градусов
           if (dx=0) and (dy<0) then
           begin
             y2:=round((dy*(cwh/2))/t);
             y2:=round(abs(y2)+cwh/2);
             x2:=round(cwh/2);
             y1:=round(cwh/2);
             x1:=round(cwh/2);
           end;

         //проводим линию
         Canvas.MoveTo(y1,x1);
         Canvas.LineTo(y2,x2);

        //рисуем точки
        Canvas.Pen.Color:=clGreen;
        Canvas.Pen.Width:=7;
        Canvas.MoveTo(y1,x1);
        Canvas.LineTo(y1,x1);
        Canvas.MoveTo(y2,x2);
        Canvas.LineTo(y2,x2);

        cwh:=round(cwh/2);
        if (x1<cwh) and (y1<cwh) then Canvas.TextOut(y1+length(p1Name)*3,x1+5,p1Name);
        if (x1>=cwh) and (y1<cwh) then Canvas.TextOut(y1+length(p1Name)*3,x1-15,p1Name);
        if (x1<cwh) and (y1>=cwh) then Canvas.TextOut(y1-length(p1Name)*3,x1+5,p1Name);
        if (x1>=cwh) and (y1>=cwh) then Canvas.TextOut(y1-length(p1Name)*3,x1-15,p1Name);

        if (x2<cwh) and (y2<cwh) then Canvas.TextOut(y2+length(p2Name)*3,x2+5,p2Name);
        if (x2>=cwh) and (y2<cwh) then Canvas.TextOut(y2+length(p2Name)*3,x2-15,p2Name);
        if (x2<cwh) and (y2>=cwh) then Canvas.TextOut(y2-length(p2Name)*3,x2+5,p2Name);
        if (x2>=cwh) and (y2>=cwh) then Canvas.TextOut(y2-length(p2Name)*3,x2-15,p2Name)
        end;  
end;
Arkuz вне форума Ответить с цитированием
Старый 17.02.2011, 15:39   #17
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

................
Arkuz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Canvas, код готов. Пропорции. Arkuz Общие вопросы Delphi 6 28.01.2011 13:34
Вставка картинки реальных размеров или хотябы в пропорции Mbus Microsoft Office Excel 4 02.12.2008 09:55