Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 08.10.2013
Сообщений: 18
1

Линии по алгоритму Брезенхема

20.10.2013, 19:40. Просмотров 941. Ответов 2
Метки нет (Все метки)

В общем требуется рисовать линии с помощью клика мыши. Рисует только в определённых областях (видно на скриншоте). Что нужно дописать в код, чтобы рисовало линии в областях, отмеченных красными стрелками?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
unit uzd1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Brezenhem(x1,y1,x2,y2:integer);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Brezenhem(x1, y1, x2, y2: integer);
var Pn,dx,dy,xn,yn,xi,yi:integer;
begin
 xn:=x1;
 yn:=y1;
 dx:=abs(x2-x1);
 dy:=abs(y2-y1);
 if x1<x2 then xi:=1 else xi:=-1;
 if y1<y2 then yi:=1 else yi:=-1;
 if dx>dy then
 begin
  Pn:=2*dy-dx;
  while xn<>x2 do
   begin
    if  Pn>0 then
     begin
      xn:=xn+xi;
      yn:=yn+yi;
      Pn:=Pn+2*dy-2*dx;
     end
      else
       begin
         xn:=xn+xi;
         Pn:=Pn+2*dy;
       end;
      image1.Canvas.Pixels[xn,yn]:=clBlack;
   end;
 
 end;
 
 
 
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 image1.Canvas.Moveto(0,image1.Height div 2);
 image1.Canvas.LineTo(image1.Width,image1.Height div 2);
 image1.Canvas.MoveTo(image1.Width div 2,0);
 image1.Canvas.LineTo(image1.Width div 2,image1.Height);
 
end;
 
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Brezenhem(image1.Width div 2,
            image1.Height div 2,
            X,Y);
end;
 
end.
0
Миниатюры
Линии по алгоритму Брезенхема  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2013, 19:40
Ответы с готовыми решениями:

Построить отрезок по алгоритму Брезенхема
Построить отрезок по алгоритму Брезенхмеа синим цветом и отрезок с теми же координатами с помощью...

Рисование прямой по алгоритму Брезенхема
Добрый день. Мне очень нужен исходник программы, которая рисует прямую по алгоритму Брезенхема....

Программа построения эллипса по алгоритму Брезенхема
написать программу построения эллипса по алгоритму Брезенхема

Построить окружности по алгоритму Брезенхема и с помощью встроенной процедуры
Построить окружность по алгоритму Брезенхема синим цветом и окружность с теми же параметрами с...

2
0 / 0 / 1
Регистрация: 08.10.2013
Сообщений: 18
20.10.2013, 21:04  [ТС] 2
Прикладываю сам проект.
0
Вложения
Тип файла: rar Brezenhem.rar (164.8 Кб, 22 просмотров)
0 / 0 / 1
Регистрация: 08.10.2013
Сообщений: 18
21.10.2013, 19:39  [ТС] 3
Пробовал добавлять конструкцию, когда dx<dy, но результат не изменился - всё равно рисует линии только в определённых областях.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2013, 19:39

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

[Code review] Алгоритм Брезенхема для линии
/* * Created by SharpDevelop. * User: 26-60-911 * Date: 13.08.2017 * Time: 20:58 * *...

Решение алгоритма Брезенхема черчения прямой линии
Нужно написать код к алгоритме Брезенхема черчения прямой линии, и чтоб она отображалась на экране...

Алгоритм Брезенхема: как вводить радиус окружности, длину линии и цвет данных фигур
Доброго времени господа-форумчане!Мне нужно доработать программу, т е форму.Таким образом чтоб...

Рисование по алгоритму DDA-линии
пытаюсь написать программу, которая выводит прямую у=кх+b по алгоритму DDA-линии(вроде так...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.