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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2012, 18:07   #1
Jonfree
 
Регистрация: 05.12.2011
Сообщений: 3
По умолчанию C++ Builder (Графика)

задача такая: Из множества точек найти наибольший по площади треугольник(равнобедренный и прямоугольный) . и нужно его начертить на форме на координатной оси . я сделал задачу ,но как начертить его( читал про канву и так далее ,но не понимаю. Помогите
Вложения
Тип файла: txt Unit1.txt (2.1 Кб, 133 просмотров)
Тип файла: txt Unit2.txt (1.2 Кб, 139 просмотров)
Тип файла: txt Unt2h.txt (265 байт, 125 просмотров)
Jonfree вне форума Ответить с цитированием
Старый 10.05.2012, 00:42   #2
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Делал такое на Delphi. Извини, но переводить с Delphi на С++ в лом.
Код:
procedure TDraw.Draw_Pixel(x, y: integer; R, G, B: byte);
var
 c: TColor;
begin
 c:=RGB(R,G,B);
 Polotno.Canvas.Pixels[x, y]:=c;
end;

procedure TDraw.Draw_Line(x1, y1, x2, y2: integer);
var
 y, x, d, dx, dy: integer;
begin
 dx:= x2 - x1;
 dy:= y2 - y1;
 if (x1=x2)and(y1=y2) then //если точка
 else//если отрезок
 begin
   if x1=x2 then//вертикально
   begin
     if y1>y2 then//если 1-ая точка ниже, то меняем местами точки
     begin
       x1:=x2;
       d:=y1;
       y1:=y2;
       y2:=d;
     end;
     for y:= y1 to y2 do//рисуем точками отрезок от верхней до нижней заданной
       Draw_Pixel(x1, y, Red,green,blue);
   end
   else//если отрезок не вертикальный
   begin
     if x1>x2 then//если 1-ая точка правее, то меняем местами точки
     begin
       d:=x1;
       x1:=x2;
       x2:=d;
       y1:=y2;
     end;
     for x:= x1 to x2 do//рисуем точками отрезок от левой до правой заданной точки
     begin
       y:=round((x-x1)*dy/dx+y1);
       Draw_Pixel(x, y, red,green,blue);
     end;
   end;
 end;
end;

procedure TDraw.Draw_TriangleFull(x1, y1, x2, y2, x3, y3: integer);
var
  ya,yb,d,i:integer;
begin
  //сортировка
 while  (x1<=x2)and(x2<=x3)=false do
 begin
   if x2<x1 then
   begin
     d:=x2; x2:=x1; x1:=d; d:=y2; y2:=y1; y1:=d;
   end else if x2>x3 then
            begin
              d:=x2; x2:=x3; x3:=d; d:=y2; y2:=y3; y3:=d;
            end;
 end;
  //рисование
  if x1=x2 then for i:=x3-1 downto x1 do
                begin
                  ya:=(i-x3)*(y1-y3) div (x1-x3)+y3;
                  yb:=(i-x3)*(y2-y3) div (x2-x3)+y3;
                  Draw.Draw_Line(i,ya,i,yb);
                end
  else if x2=x3 then for i:=x1+1 to x2 do
                     begin
                       ya:=(i-x1)*(y2-y1) div (x2-x1)+y1;
                       yb:=(i-x1)*(y3-y1) div (x3-x1)+y1;
                       Draw.Draw_Line(i,ya,i,yb);
                     end
       else begin
              for i:=x1+1 to x2 do
              begin
                ya:=(i-x1)*(y2-y1) div (x2-x1)+y1;
                yb:=(i-x1)*(y3-y1) div (x3-x1)+y1;
                Draw.Draw_Line(i,ya,i,yb);
              end;

              for i:=x3-1 downto x2 do
              begin
                ya:=(i-x3)*(y2-y3) div (x2-x3)+y3;
                yb:=(i-x3)*(y1-y3) div (x1-x3)+y3;
                Draw.Draw_Line(i,ya,i,yb);
              end;
            end;
end;
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 10.05.2012 в 00:46.
Rin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зуммирование графика (C++ Builder 6) Drozd Oleg C++ Builder 2 12.04.2012 14:27
Графика в C++ Builder Azalinda Помощь студентам 0 06.04.2012 22:47
Графика в С++Builder valikgor Помощь студентам 8 22.03.2010 21:03
Графика в С++Builder StudentIgor C++ Builder 1 15.07.2009 08:31
Векторная графика в C++ Builder 6 Max2114 C++ Builder 3 19.01.2009 14:56