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

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

19.03.2015, 10:59. Показов 6279. Ответов 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
09.04.2015, 21:08  [ТС]
Студворк — интернет-сервис помощи студентам
и главный вопрос - например, будет еще элемент но уже другой, не Tline, а TCircle , как организовать этот цикл где в зависимости от того что это за экземпляр класса делай то то. где как раз та развилка которая будет направлять программу.
случайно пост сделал, ну не пустым тогда сделаю)
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
09.04.2015, 21:11
для организации TCircle
нужно переопределить First, Next, EOF
и все
больше ничего делать не нужно...
ах да, там есть ошибочка - CurStep нужно перенести в базовый класс

Добавлено через 1 минуту
было
Delphi
1
2
3
TLine = class(TGrObject)
  private
    FCurStep:integer;
стало
Delphi
1
2
3
TGrObject=class
  private
    FCurStep:integer;
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
09.04.2015, 21:21  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
нужно переопределить First, Next, EOF
как это переопределить?

эмм всё рушится если так строки поменять)

Добавлено через 6 минут
это понятно(что будут свои функции и процедуры), но как это сделать, "автоматизированно"
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
09.04.2015, 21:23
вот так теперь, ничего не рушится
Delphi
1
2
3
4
5
6
7
8
9
10
  TGrObject=class
  private
    FCurStep:integer;
  public
    procedure First; virtual; abstract;
    procedure Next; virtual; abstract;
    function Eof: boolean; virtual; abstract;
    function CurPoint:TPoint3; virtual; abstract;
    function InfoStr:string; virtual; abstract;
end;
вот что нужно сделать
Delphi
1
2
3
4
5
6
7
8
9
  TCircle = class(TGrObject)
  private
  public
    procedure First; override;
    procedure Next; override;
    function Eof:Boolean; override;
    function CurPoint:TPoint3; override;
    function InfoStr:string; override;
  end;
и нажать Ctrl+Shift+C
автоматически сформируются пустые тела методов
кроме этого
теперь нужно в TCircle завести все переменные, участвующие в расчете, аналогично TLine
точно будут
Delphi
1
2
3
public
  Center:TPoint3;
  Radius:single;
остальные должны вытекать из описания алгоритма, тут я не помощник
помним только что в процедуре Next идет расчет ОДНОГО витка цикла
сам цикл будет производить вызывающая процедура
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
09.04.2015, 21:34  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
вот так теперь, ничего не рушится
изменил, работает.
т.е. если текущий объект будет TCircle то он выполнит именно ту функцию Next которая описана в TCircle ?
потому что будет такой заголовок - procedure TCircle .Next;
да?
вот блин, всё понял, только теперь алгоритм нужно переделывать)) ну ничего это уже дело творческое.
а еще вопрос, вот это зачем и что делает -

Delphi
1
2
3
4
5
constructor TGrObjects.Create(AOwnsObjects: boolean);
begin
  inherited Create(AOwnsObjects);
  scale:=1;
end;
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
09.04.2015, 21:44
мы переопределили конструктор
он вызывает старый конструктор предка, и даже передает ему свой параметр
и еще устанавливает масштаб в 1

теперь когда создается список объектов, у него сразу scale=1

Добавлено через 1 минуту
Цитата Сообщение от aypinki2 Посмотреть сообщение
именно ту функцию Next
да
это полиморфизм
для каждого класса будет вызываться именно его Next если этот метод определен, если нет, будет выполнен родительский
в данном конкретном случае у родителя тоже нет его, и выпадет ошибка Abstract Error
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
09.04.2015, 21:52  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
мы переопределили конструктор
он вызывает старый конструктор предка, и даже передает ему свой параметр
и еще устанавливает масштаб в 1
теперь когда создается список объектов, у него сразу scale=1
в общем эта штука должна быть. понял)

Цитата Сообщение от krapotkin Посмотреть сообщение
да
это полиморфизм
для каждого класса будет вызываться именно его Next если этот метод определен, если нет, будет выполнен родительский
в данном конкретном случае у родителя тоже нет его, и выпадет ошибка Abstract Error
про полиморфизм понял,
а если у какого ни будь класса не будет например Next а будет только First(достаточного для "выполнения" данного объекта) , работать будет(если оставить как есть тот цикл с Eof?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
09.04.2015, 21:56
нет, у родителя стоит Abstract, вызвать нечего
поэтому хоть пустой но Next должен быть
имхо там пусто только если мы отдельную точку рисуем...
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
09.04.2015, 22:04  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
нет, у родителя стоит Abstract, вызвать нечего
поэтому хоть пустой но Next должен быть
имхо там пусто только если мы отдельную точку рисуем...
а ну это понял, организую)
да мне подсказали алгоритм другой(через проекцию на осям и период сигнала по данной оси относительно всего пути) , там конечно тоже цикл будет( чисто заполнение массива значениями). массив будет такой - время подачи + направление+ ось.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
09.04.2015, 22:09
если бы не было исходного условия после получения каждой точки засылать ее куда-либо,
код был бы проще и формировал бы сразу весь массив данных
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
09.04.2015, 22:28  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
если бы не было исходного условия после получения каждой точки засылать ее куда-либо,
а его и нет!
пишем массив, а потом уже по действию оператора с ним работаем.
а вот подскажите
если у меня такой вот массив
Delphi
1
2
3
4
5
6
7
8
9
type
TMotorDirective = record
    t: int64;
    dir: boolean;
    Axis: byte;
  end;
~~~
var
 ArrayOfDirective : array of  TMotorDirective;
как мне по нему "двигаться" и записывать в него? подскажите просто синтаксис, ото я кучу времени потрачу на такую ерунду
там еще какой то setLenght писать нужно...
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
09.04.2015, 22:39
Цитата Сообщение от aypinki2 Посмотреть сообщение
а его и нет!
Цитата Сообщение от aypinki2 Посмотреть сообщение
получил координаты первой точки и отправил их в порт тут же, потом вторую точку, опять отправил в порт, когда виртуально отрисовал фигуру(прошёл по точкам)- всё, конец.
кто из вас врет??

Добавлено через 2 минуты
Delphi
1
2
3
4
5
6
7
SetLength(ArrayOfDirective, ХЗ_какой_но_размер_надо_задать_массиву);
for i := 0 to high(ArrayOfDirective) fo
begin
  ArrayOfDirective[i].t:=???
  ArrayOfDirective[i].dir:=???
  ArrayOfDirective[i].axis:=???
end;
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
09.04.2015, 23:37  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
кто из вас врет??
я сначала сам делал, а потом мне сказали нет, это херня, нужно вот так.
самому дико неудобно. на лету ничего в порт отправлять не нужно, втюхивать вычисления во время управления исполнительного механизма это неочень)
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
10.04.2015, 08:50
согласен, но условие-то было)
может, ваш механизм сам дожидается конца передачи и только потом действует...

тут идти нужно было бы от конца - нам нужно получить список данных к пересылке
список команд, формат.
формируются классы для пересылки
потом классы для расчета. формирование из них пакетов для пересылки

но вопрос начался про частности, и потом только перешли к ТЗ
поэтому везде всех и спрашивают - а реально-то чего нужно?
а потом открывается...
и начинается версия2
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
10.04.2015, 15:22  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
согласен, но условие-то было)
может, ваш механизм сам дожидается конца передачи и только потом действует...
тут идти нужно было бы от конца - нам нужно получить список данных к пересылке
список команд, формат.
формируются классы для пересылки
потом классы для расчета. формирование из них пакетов для пересылки
но вопрос начался про частности, и потом только перешли к ТЗ
поэтому везде всех и спрашивают - а реально-то чего нужно?
а потом открывается...
и начинается версия2
полностью согласен.

скажите как создать такой отдельный файл, как GrObjectClasses, чтобы с чистого листа дополнять код, а не писать полотно в мейне на тыщу строк. Все функции и процедуры будут видны на весь документ, если создать их в новом файлике?(можно поподробней об этих тонкостях).
и еще если у меня такой код
Delphi
1
2
3
4
5
6
procedure TLine.First;   // все входные данные
var
 Lx,Ly,Lz,V,S:Single;
begin
v:=10;
~~~
как могу я V считать из edit'a например? стандартными способами?

Добавлено через 5 минут
и зачем в коде -
Delphi
1
2
3
4
5
{ TGrObjects }
 
 
 
{ TLine }
и ничего страшного, если у меня между ними ничего нет?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
10.04.2015, 17:53
еще раз поговорим о концепции
есть объекты, они могут делать что-то с тем, что ВНУТРИ них
о внешнем мире они не должны знать ничего. не потому что не могут, а потому что не должны!
форма это тоже объект
и Edit - это принадлежность формы
значит, единственный, кто может в к-нить TLine присвоить какое-то значение из Edit - это метод формы
"считать" что-то из Edit'а объект не должен ни при каких условиях
если только это не пара недоучек препод-студент сдают друг другу лабу на 10 строк...

Добавлено через 28 секунд
все что {} это просто комментарии
можешь удалять

Добавлено через 57 секунд
Цитата Сообщение от aypinki2 Посмотреть сообщение
создать такой отдельный файл
File - New - Unit
File - Save As..
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
10.04.2015, 20:51  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
еще раз поговорим о концепции
есть объекты, они могут делать что-то с тем, что ВНУТРИ них
о внешнем мире они не должны знать ничего. не потому что не могут, а потому что не должны!
форма это тоже объект
и Edit - это принадлежность формы
значит, единственный, кто может в к-нить TLine присвоить какое-то значение из Edit - это метод формы
"считать" что-то из Edit'а объект не должен ни при каких условиях
если только это не пара недоучек препод-студент сдают друг другу лабу на 10 строк...
новый вопрос...

мне нужно взять величину(DirXFlag) из экземпляра TLine.
объявлено вот так -

Delphi
1
2
3
4
5
6
7
8
9
10
11
TLine = class(TGrObject)
  private
    timeByX,timeByY,timeByZ,t,L: Single; // время до которого будем записывать в массив команду для шага по оси
    Tx,Ty,Tz: Single;  // период шага
  public
    StartPoint: TPoint3;
    EndPoint: TPoint3;
    DirXFlag,DirYFlag,DirZFlag: byte;
    procedure First; override;
    procedure Next; override;
  end;
а пытаюсь взять из TForm1 и незнаю как
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.b2Click(Sender: TObject);
var I:integer;
begin
    for i := 0 to GrObjects.Count-1 do
   begin
    WhatADir(GrObjects[i]);
    ToTheEngine(GrObjects[i]);
   end;
end;
 
procedure Tform1.WhatADir(obj:TGrObject);
begin
   DirX:= tline.Create.DirXFlag; [B]тут как быть [/B]
   DirY:=0;
   Dirz:=0;
end;
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
10.04.2015, 22:50
т.к. форма у нас умная (выше нее тут уже никого)
то она должна сама узнавать, что за объект и действовать соотв-но
Delphi
1
2
3
4
5
6
7
8
var Ln:TLine;
begin
  if GrObjects[i] is TLine then
  begin
     ln:=GrObjects[i] as TLine;
     ln.DirXFlag := 1;
  end;
end;
ибо совсем все автоматизировать нельзя ... (((
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
11.04.2015, 00:19  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
ибо совсем все автоматизировать нельзя ... (((
а зачем мы ему значение присваиваем?
Delphi
1
  ln.DirXFlag := 1;
мне наоборот его значение узнать надо.
и вот весь этот кусок вашего кода мне нужно запихнуть procedure Tform1.WhatADir(obj:TGrObject);
и GrObjects[i] будет работать, т.к. у нас (obj:TGrObject)?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
11.04.2015, 00:35
это иллюстрация. не хотите писать - читайте

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function Tform1.GetADir(obj:TGrObject; var ADir:integer):boolean;
var Ln:TLine;
begin
  result := false;
  ADir:=-1;
  if Obj is TLine then
  begin
     ln:=Obj as TLine;
     result := true;
     ADir:=ln.ADirXFlag;
  end;
end;
 
...
if GetADir(GrObjects[i], ADir) then
   showmessage(inttostr(ADir));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.04.2015, 00:35

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru