Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/26: Рейтинг темы: голосов - 26, средняя оценка - 4.85
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1

По классам: прямая линия в пространстве, её обход

19.03.2015, 10:59. Показов 6483. Ответов 97
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
81
unit Actions;
 
interface
uses
 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ExtCtrls;
type
 
  TPoint = record
    X: extended;
    Y: extended;
    Z: extended;
  end;
 
  TAction=class
   Function ExecuteAction():boolean; virtual; abstract;
  end;
  TLine = class(TAction)
    StartPoint, EndPoint: TPoint;
    Function ExecuteAction():boolean; override; // ÿ äîáàâèë
  end;
 
  TActionList=array of TAction;
  procedure ExecuteActions(ActionList: TActionList);
 
implementation
uses unit4;
 
procedure InitializaActions(ActionList: TActionList);
var
  Line: TLine;
begin
  SetLength(ActionList, 3);
  Line := TLine.Create;
  Line.StartPoint.X := 0.01;
  Line.StartPoint.Y := 0.05;
  Line.StartPoint.Z:= 0.4;
  Line.EndPoint.X := 0.07;
  Line.EndPoint.Y := 0.2;
  Line.EndPoint.Z := 2;
  ActionList[0] := Line;
 
  Line := TLine.Create;
  Line.StartPoint.X := 1;
  Line.StartPoint.Y := 0.5;
  Line.StartPoint.Z:= 0.04;
  Line.EndPoint.X := 1.7;
  Line.EndPoint.Y := 2.2;
  Line.EndPoint.Z := 5;
  ActionList[1] := Line;
 
  Line := TLine.Create;
  Line.StartPoint.X := 1;
  Line.StartPoint.Y := 2.5;
  Line.StartPoint.Z:= 5.1;
  Line.EndPoint.X := 0.77;
  Line.EndPoint.Y := 0.25;
  Line.EndPoint.Z := 0.54;
  ActionList[2] := Line;
end;
 
procedure TLine.ExecuteAction(StartPoint,EndPoint: TPoint);   // ÷åðòèì ïðÿìóþ
begin
   
end;
 
 
procedure ExecuteActions(ActionList: TActionList);
var
  i: integer;
begin
  InitializaActions(ActionList);
  for I := 0 to High(ActionList) do
  begin
    ActionList[i].ExecuteAction();
  end;
 
end;
 
end.
1)выдает [Error] Actions.pas(96): Declaration of 'ExecuteAction' differs from previous declaration
2) для уже существующего(открытого) Юнита форму создать/вызвать не могу, как это сделать?
3) подскажите алгоритм действий как из координат двух точек "пройти" от одной до другой с заданным шагом дискретизации(по типу 3d принтера чтоли, мб пример какой уже есть, мб не для прямой...)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.03.2015, 10:59
Ответы с готовыми решениями:

В автокаде прямая линия не всегда прямая
Почему то получается иногда в автокаде так, что прямая линия имеет дефекты, какие то шреховатости, хотя черчу ее через ОРТО, как это...

Прямая на плоскости и прямая в пространстве
Помогите пожалуйста решить, + желательно как их решать. 1) 16x^2+25y^2+32x-100y-284 = 0 2) y+2z^2 = 6x^2 + Построить график.

Прямая линия в гистограмме
Что означает, когда гистограмма отображается в виде прямой линии, а не привычных нам столбиков? (диаграмма построена верно.)

97
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
21.03.2015, 13:22  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от krapotkin Посмотреть сообщение
форма - это то на что смотрит человек
программа - это то что исполняет компьютер
если все программы на твоем компе будут открывать формы, места не хватит на столе...
так что не надо ничего присваивать
в Uses записать и пользоваться
Глобальная переменная GrObjects доступна из любой части программы
пишу -
Delphi
1
2
3
4
5
function TLine.Execute():boolean;        // íåïîñðåäñòâåííî ñòðîèì ïðÿìóþ
begin
memo1.text:= inttostr(Result.X);
result:= true;
end;
выдаёт мильёон ошибок, изза того как раз что "формы напрямую связанной нет" - поправьте пожалуйста, т.к. вот далее уже пойдёт творчество...
писал и unit1.////// - но так не работает и не стоит так делать.
вот что выдаёт если нужно
[Error] GrObjectClasses.pas(76): Undeclared identifier: 'memo1'
[Error] GrObjectClasses.pas(76): Missing operator or semicolon
[Error] GrObjectClasses.pas(76): Record, object or class type required
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
21.03.2015, 20:45
не надо замешивать видимое и невидимое в один стакан

Delphi
1
2
3
4
5
6
7
8
9
TForm1 = class(TForm)
  FLine:TLine;
  procedure DrawAll();
end;
 
procedure TForm1.DrawAll();
begin
  memo1.text := inttostr(FLine.Result);
end;
методы формы обращаются к объектам и выводят в свои компоненты то что нужно
не наоборот!
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
23.03.2015, 14:50  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
не надо замешивать видимое и невидимое в один стакан

TForm1 = class(TForm)
* FLine:TLine;
* procedure DrawAll();
end;
procedure TForm1.DrawAll();
begin
* memo1.text := inttostr(FLine.Result);
end;
методы формы обращаются к объектам и выводят в свои компоненты то что нужно
не наоборот!
в юнит 1 попытался вставить, фейл
((
скиньте пожалуйста проект весь с "работающим на первой форме" этим куском кода
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
23.03.2015, 16:00
Главная форма:
unit4.dfm
Кликните здесь для просмотра всего текста
object Form4: TForm4
Left = 0
Top = 0
Caption = 'Form4'
ClientHeight = 300
ClientWidth = 515
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object pb1: TPaintBox
Left = 40
Top = 32
Width = 353
Height = 241
OnPaint = pb1Paint
end
object tb1: TTrackBar
Left = 440
Top = 32
Width = 49
Height = 241
Max = 1000
Min = 1
Orientation = trVertical
Position = 100
TabOrder = 0
OnChange = tb1Change
end
end


unit4.pas
Кликните здесь для просмотра всего текста
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
unit Unit4;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, GrObjectClasses, Vcl.ExtCtrls,
  Vcl.StdCtrls, Vcl.ComCtrls;
 
type
  TForm4 = class(TForm)
    pb1: TPaintBox;
    tb1: TTrackBar;
    procedure FormCreate(Sender: TObject);
    procedure pb1Paint(Sender: TObject);
    procedure tb1Change(Sender: TObject);
  private
    procedure InitializeActions;
    procedure DrawObject(p: TGrObject);
    procedure DrawLine(L: TLine);
  public
    procedure DrawAll();
  end;
 
var
  Form4: TForm4;
 
implementation
 
{$R *.dfm}
 
procedure TForm4.InitializeActions();
var
  Line: TLine;
begin
  Line := TLine.Create;
  Line.StartPoint:=Point3(10, 50, 4);
  Line.EndPoint:=Point3(70, 20, 2);
  GrObjects.Add(Line);
 
  Line := TLine.Create;
  Line.StartPoint:=Point3(100, 5, 4);
  Line.EndPoint:=Point3(7, 140, 5);
  GrObjects.Add(Line);
 
  Line := TLine.Create;
  Line.StartPoint:=Point3(13, 190, 5.1);
  Line.EndPoint:=Point3(77, 25, 0.54);
  GrObjects.Add(Line);
end;
 
 
procedure TForm4.pb1Paint(Sender: TObject);
begin
  pb1.Canvas.Brush.Color := clBlack;
  pb1.Canvas.FrameRect(pb1.ClientRect);
  DrawAll;
end;
 
procedure TForm4.tb1Change(Sender: TObject);
begin
  GrObjects.Scale := tb1.Position /100;
  pb1.Invalidate;
end;
 
procedure TForm4.DrawLine(L:TLine);
var p1,p2:TPoint;
begin
  p1:=GrObjects.GetCrd(l.StartPoint);
  p2:=GrObjects.GetCrd(l.EndPoint);
  pb1.Canvas.MoveTo(p1.X,p1.y);
  pb1.Canvas.LineTo(p2.X,p2.y);
end;
 
procedure TForm4.DrawObject(p:TGrObject);
begin
  if p is TLine then
    DrawLine(p as TLine);
end;
 
procedure TForm4.DrawAll;
var
  i: Integer;
begin
  for i := 0 to GrObjects.Count-1 do
    DrawObject(GrObjects[i]);
end;
 
procedure TForm4.FormCreate(Sender: TObject);
begin
  InitializeActions;
end;
 
end.


GrObjectsClasses.Pas
Кликните здесь для просмотра всего текста
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
unit GrObjectClasses;
 
interface
uses
 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ExtCtrls, Contnrs;
type
 
  TPoint3 = record
    X: single;
    Y: single;
    Z: single;
  end;
 
  TGrObject=class
   Function Execute():boolean; virtual; abstract;
  end;
 
  TLine = class(TGrObject)
    StartPoint: TPoint3;
    EndPoint: TPoint3;
    Function Execute():boolean; override;
  end;
 
  TGrObjects=class(TObjectList)
  private
    function GetItems(index: integer): TGrObject;
    procedure SetItems(index: integer; const Value: TGrObject);
  public
    Scale : single;
    function GetCrd(P:TPoint3):TPoint;
    function Add(obj:TGrObject):Integer;
    procedure Remove(obj:TGrObject);
    procedure Execute();
    property Items[index:integer]:TGrObject read GetItems write SetItems; default;
    constructor Create(AOwnsObjects:boolean);
  end;
 
var
  GrObjects:TGrObjects;
 
function Point3(a,b,c:single):TPoint3;
 
implementation
 
function Point3(a,b,c:single):TPoint3;
begin
  Result.X:=a;
  Result.Y:=b;
  Result.Z:=c;
end;
 
 
function TLine.Execute():boolean;
begin
// без понятия что тут
end;
 
 
{ TGrObjects }
function TGrObjects.Add(obj: TGrObject): Integer;
begin
  result := inherited add(obj);
end;
 
 
constructor TGrObjects.Create(AOwnsObjects: boolean);
begin
  inherited Create(AOwnsObjects);
  scale:=1;
end;
 
procedure TGrObjects.Execute;
var
  i: Integer;
begin
  for i := 0 to Count-1 do
    Items[i].Execute;
end;
 
function TGrObjects.GetCrd(P:TPoint3): TPoint;
begin
  // здесь рассчитываются координаты проекции
  result := point(Round(p.X*Scale), Round(p.Y*Scale));
end;
 
function TGrObjects.GetItems(index: integer): TGrObject;
begin
  result := inherited Items[index] as TGrObject;
end;
 
procedure TGrObjects.Remove(obj: TGrObject);
begin
  inherited Remove(obj);
end;
 
procedure TGrObjects.SetItems(index: integer; const Value: TGrObject);
begin
  inherited Items[index] := Value;
end;
 
initialization
  GrObjects:=TGrObjects.Create(true);
finalization
  GrObjects.Free;
  GrObjects:=NIL;
end.
Миниатюры
По классам: прямая линия в пространстве, её обход   По классам: прямая линия в пространстве, её обход  
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
23.03.2015, 19:03  [ТС]
я не понимаю!!! как это прилепить к пустому проекту?
можно просто архивом скинуть чистый-заполненный этим проект?

Добавлено через 11 минут
и можно без юнит4, а по новый... ото я повешусь, вместо того чтобы дальнейшие проблемы решать(
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
23.03.2015, 21:07
у меня XE7
мои файлы тебе вряд ли пригодятся
Вложения
Тип файла: 7z GrObjects.7z (1.98 Мб, 1 просмотров)
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
23.03.2015, 22:26  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
у меня XE7
мои файлы тебе вряд ли пригодятся
Вложения
GrObjects.7z (1.98 Мб, 0 просмотров)
на хе6 пойдут?

Добавлено через 15 минут
не находит unit4.dfm хе6
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
23.03.2015, 22:36
сорри, перезалил
Вложения
Тип файла: 7z GrObjects.7z (1.98 Мб, 2 просмотров)
1
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
27.03.2015, 12:28  [ТС]
пишу
Delphi
1
2
3
4
function TLine.Execute():boolean;
begin
z:=point3.X;
end;
not enough actual parametrs
и почему тупо там же memo1.lines.add не работает, мемо1 у меня в юните4. я и хочу узнать как мне коммуникатировать с этими классами из юнита где у меня форма есть!
xe6 теперь использую
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
27.03.2015, 12:36
не может гвоздь знать куда его вбивают
есть отдельное место, где есть список гвоздей, список мест куда вбивать. в этом месте, а ни в каком другом, живет процедура забить!
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
27.03.2015, 12:54  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
не может гвоздь знать куда его вбивают
есть отдельное место, где есть список гвоздей, список мест куда вбивать. в этом месте, а ни в каком другом, живет процедура забить!
я вот хоть убей не догоняю.
можете скинуть пример подобного проекта где так же организованна работа этими классами

Добавлено через 13 минут
и материал где объяснен нужный мне вопрос, пожалуйста.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
27.03.2015, 13:01
в том проекте, который я выложил
все сделано именно так
есть список объектов, которые хранят данные, но эти объекты не рисуют себя
их рисуют методы формы
Я оставил TGrObject.Execute() пустыми, потому что не знаю, что может там происходить
может они должны объединяться в цветочек, или делать себе красивые X/Y или еще что
Но рисовать себя они не могут!

Добавлено через 1 минуту
объясни, что ты хочешь, я объясню, что поменять
на пальцах концепцию объяснять трудно
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
27.03.2015, 14:49  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
в том проекте, который я выложил
все сделано именно так
есть список объектов, которые хранят данные, но эти объекты не рисуют себя
их рисуют методы формы
Я оставил TGrObject.Execute() пустыми, потому что не знаю, что может там происходить
может они должны объединяться в цветочек, или делать себе красивые X/Y или еще что
Но рисовать себя они не могут!
Добавлено через 1 минуту
объясни, что ты хочешь, я объясню, что поменять
на пальцах концепцию объяснять трудно
у меня на входе будет список наподобе
Line := TLine.Create;
Line.StartPoint:=Point3(10, 50, 4);
Line.EndPoint:=Point3(70, 20, 2);
GrObjects.Add(Line);

только еще будут другие обьекты, а не только прямая, например круг
т.е. еще +
Circle:= TCircle.create;
Circle.Point:=...
Circle.Radius:=...
GrObjects.Add(Circle);
и "прочитывая" лист программа в зависимости от того какой это обьект будет их направлять в свою функцию, а там уже будет генерация(перебор) координат по записанному алгоритму и построение по точкам, путем подачи сигнала на шаг(как для шаговых двигателей). Т.е. получается эти функции ничего не возвращают кроме result:=true, они просто отправляют сигналы в порт.
сейчас вопрос к вам у меня только по понимаю работы с этими TCircle ... TLine
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
27.03.2015, 15:27
да, до этого момента все верно
у тебя программа, записанная в объектах
но исполняет ее кто-то ДРУГОЙ - компьютер, контроллер и т.д.
"исполнитель" перебирает объекты и отправляет сигналы в порт, в аэропорт и спортлото.
но сами объекты в порт писать не будут, они о нем знать не должны. максимум - составят строки данных о себе для того, чтобы программа не заморачивалась, и брала готовое...

Добавлено через 1 минуту
в моем примере исполнением занимается процедура
procedure TForm4.DrawAll;
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
27.03.2015, 15:48  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
в моем примере исполнением занимается процедура
procedure TForm4.DrawAll;
так а где я могу писать эти исполнители? и зачем тогда нам TGrObject.Execute()
если всем занимается TForm4.DrawAll то зачем мне будут нужны эти Tline TCircle? в том то и дело что нужно для каждого отдельное.
"максимум - составят строки данных о себе" - т.е. это только для того чтобы удобно обьявить типа Line.startpoint?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
27.03.2015, 19:50
Цитата Сообщение от aypinki2 Посмотреть сообщение
зачем тогда нам TGrObject.Execute()
мне не надо, вдруг кому пригодится. но я бы убрал

Цитата Сообщение от aypinki2 Посмотреть сообщение
зачем мне будут нужны Tline TCircle
я не знаю всей задачи, как я скажу, зачем?
они хранят данные о себе и позволяют в едином цикле работать с собой
попробуй без этого единым образом например откликаться на события мыши -

я могу родителю TGrObject.IsMouseOver(X,Y:integer):boole an; virtual;
и переопределить в каждом потомке, и TCircle.IsMouseOver(x,y) когда мышь над кругом а TTriangle.IsMouseOver(x,y) - надо треугольником
а программе будет до фонаря, она получит данные что мышь над объектом
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
27.03.2015, 21:57  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
я не знаю всей задачи, как я скажу, зачем?
они хранят данные о себе и позволяют в едином цикле работать с собой
попробуй без этого единым образом например откликаться на события мыши -
вообще всё у меня должно запускаться по нажатию кнопки, т.е. нажал кнопку - прочитали обьекты, передали на выполнение каждый в свою процедуру.
в этих процедурах должен быть например алгоритм брезенхейма по отрисовке линий, и каждая точка отправлена в порт. это можно реализовать же?
теперь понятнее ?

Добавлено через 23 минуты
(процедурах- например Circle, Line)
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
27.03.2015, 22:16
все что нужно рассчитывать, можно рассчитывать внутри, но только если для этого не требуется данных "извне"
это инкапсуляция - в качестве аналога можно так:
каждая квартира у себя делает ремонт как хочет, но нам с соседом надо было переделать общий стояк, пришлось делать это с помощью "внешних сил"

Добавлено через 2 минуты
алгоритм брезенхейма относится ведь не к точке и не к набору объектов, а строго к набору точек
следовательно все расчеты по нему можно вести в классе - списке точек,
вопрос однозначно тут не решается, всегда идет битва между расчетами заранее и расчетами "на ходу", одно жрет память, другое - время

Добавлено через 1 минуту
Цитата Сообщение от aypinki2 Посмотреть сообщение
это можно реализовать же
тут надо просто взять конкретный пример и разобрать
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
27.03.2015, 22:18  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
все что нужно рассчитывать, можно рассчитывать внутри, но только если для этого не требуется данных "извне"
это инкапсуляция - в качестве аналога можно так:
каждая квартира у себя делает ремонт как хочет, но нам с соседом надо было переделать общий стояк, пришлось делать это с помощью "внешних сил"
извините но я не в силах это понять почемуто.
хотя я кажется нашел выход:
вот допустим этот кусок кода должен работать в функции line:Tline
вместо x1 y1 z1 - startpoint.tpoint3 а вместо x2 y2 z2 - endpoint.tpoint3
вот вы "прикрепите" это и уже по аналогии я разберусь!
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
var
    z1,z2,x1,x2,y1,y2,dx,dy,dz,s1,s2,s3,x,y,z,o,oz,i,v,obmen   : integer;
begin
  memo1.Clear;
  x1:=strtoint(edit1.Text);
  y1:=strtoint(edit2.Text);
  x2:=strtoint(edit3.Text);
  y2:=strtoint(edit4.Text);
  z1:=strtoint(edit5.Text);
  z2:=strtoint(edit6.Text);
  x:=x1;
  y:=y1;
  z:=z1;
  dx:=(abs(x2-x1));     
  dy:=(abs(y2-y1));
  dz:=(abs(z2-z1));
  if (x2-x1)<=0 then s1:=-1 else s1:=1;   
  if (y2-y1)<=0 then s2:=-1 else s2:=1;
  if (z2-z1)<=0 then s3:=-1 else s3:=1;
  if dy>dx then        
  begin
    v:=dx;
    dx:=dy;
    dy:=v;
    obmen:=1;    
  end
  else obmen:=0;
  o:=2*dy-dx;
  oz:=2*dy-dz;
  for i := 1 to dx do
  begin
    memo1.lines.add(inttostr(x)+' '+inttostr(y)+' '+inttostr(z));
    form1.Canvas.Pixels[x+100,y+100]:=clBlack;
    while o>=0 do
      begin
        if obmen=1 then
          x:=x+s1
          else
          y:=y+s2;
        o:=o-2*dx;
 
      end;
    if obmen=1 then
      y:=y+s2
      else
      x:=x+s1;
    o:=o+2*dy;
 
   while oz>=0 do
   begin
         z:=z+s3;
         oz:=oz-2*dz;
   end;
 
  end;
 // form1.refresh;
 // self.Repaint;
end;
 
 
end.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
28.03.2015, 07:55
еще нужен сам сценарий использования
ввели данные - нажали кнопку - нарисовалась линия? и все?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.03.2015, 07:55

Прямая линия на плоскости
Помогите пожалуйста составить класс «Прямая линия на плоскости» на языке C++.

Плоскость и прямая в пространстве
Вершина равнобедренного треугольника находится в точке (3,4,5); концы его основания лежат на осях Ox и Oy, а плоскость треугольника...

Плоскость и прямая в пространстве
Нормаль к плоскости составляет с координатными осями и углы a = 60 ° и b = 45 °, а с осью - тупой угол. 1)Составить уравнение плоскости...

Аналитическая геометрия. Прямая линия на плоскости. Кривые второго порядка
Здравствуйте, помогите пожалуйста решить задачи по типовому расчёту. 1. Составить уравнение прямой, содержащей медиану AM 2. Составить...

При построении графика переходного процесса выдается прямая линия
Здравствуйте, нужно было рассчитать напряжение на конденсаторе с помощью интеграла Дюамеля, задан график входного напряжения и схема. Все...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru