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

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

19.03.2015, 10:59. Показов 6275. Ответов 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
28.03.2015, 09:51  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от krapotkin Посмотреть сообщение
еще нужен сам сценарий использования
ввели данные - нажали кнопку - нарисовалась линия? и все?
да да, всё происходим именно так
лист с данными допустим уже записан в программе
Delphi
1
2
3
4
Line := TLine.Create;
Line.StartPoint:=Point3(10, 50, 4);
Line.EndPoint:=Point3(70, 20, 2);
GrObjects.Add(Line);
в таком роде.
Нажали кнопку, комп прочитал данные отдал на исполнение в процедуры(например линию в Tline - а там алгоритм брезенхейма)
получил координаты первой точки и отправил их в порт тут же, потом вторую точку, опять отправил в порт, когда виртуально отрисовал фигуру(прошёл по точкам)- всё, конец.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
28.03.2015, 10:12
последний штрих ТЗ - выбрать стратегию:
мы можем рассчитать все точки и потом все вместе послать
либо наоборот, пошагово - делаем расчет, посылаем одну точку, повторяем до конца...
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
28.03.2015, 10:22  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
последний штрих ТЗ - выбрать стратегию:
мы можем рассчитать все точки и потом все вместе послать
либо наоборот, пошагово - делаем расчет, посылаем одну точку, повторяем до конца...
пошагово! просчитали 1 точку и тут же послали! не нужно делать никаких "массивов" опять таки. у нас уже есть 1 массив с объектами.
но это же мои дела уже, не относящиеся к тому чего я не понимаю в данный момент. но я думаю вы знаете что спросить)
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
28.03.2015, 14:36
вот
Вложения
Тип файла: 7z GrObjects.7z (2.08 Мб, 5 просмотров)
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
29.03.2015, 17:48  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
вот
unit4.dfm не скинули
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
29.03.2015, 21:33
мда, добавил
Вложения
Тип файла: 7z GrObjects.7z (2.08 Мб, 7 просмотров)
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
29.03.2015, 22:19  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
мда, добавил
тут сразу и алгоритм для трехмерной прямой?

Добавлено через 8 минут
вот по структуре это как раз то что надо!
если там можно работать с разными обьектами, а не только с Tline!)(дополнять же буду )
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
29.03.2015, 22:23
я ничего не менял в алгоритме, просто переписал то, что там было

надо окружность - есть брезенхем для окружности
делай по аналогии
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
29.03.2015, 23:52  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
я ничего не менял в алгоритме, просто переписал то, что там было
надо окружность - есть брезенхем для окружности
делай по аналогии
да мне надо в пространстве трёхмерном, не подскажите ?)
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
30.03.2015, 06:35
нет, не подскажу
вторая ссылка в гугле дает аж текст процедуры на C++
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
30.03.2015, 17:36  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
нет, не подскажу
вторая ссылка в гугле дает аж текст процедуры на C++
а подскажите как перевести на делфи эти строки
C
1
2
3
int sx = MGML_MATH::SIGN(p2.x-x);
        int sy = MGML_MATH::SIGN(p2.y-y);
        int sz = MGML_MATH::SIGN(p2.z-z);
C
1
2
if(trace_in_voxel<TS>(x,y,z,pTss)) 
            return true;
первое предположительно это вычисление приращения +1 или -1.
второй предположительно отправка высчитанных координат на данном шаге куда то?

и зачем там
e_zx +=(dx << 1);
или e_zx +=(dx >> 1);
это как я понял Shl и Shr в делфи? а зачем там это используется?

Добавлено через 33 минуты
в общем
e_zx +=(dx << 1); в С
так - e_zx := e_zx+ (dx shl 1); в Delphi , правильно перевел?

Добавлено через 1 час 43 минуты
спрошу в ветке с++)
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
30.03.2015, 18:29
все верно
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
30.03.2015, 19:46  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
все верно
хоть и верно, всё равно не работает
тему создал в соответствующем разделе
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
30.03.2015, 19:57
>> это shr
<< shl

а по конкретике алгоритма действительно не в курсе
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
30.03.2015, 20:09  [ТС]
окей, не буду наглеть, сам разберусь)
0
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
30.03.2015, 20:23
shl и shr используются обычно для умножения/деления кратного 2. Эти операции выполняются существенно быстрее чем обычное деление. Для 2-мерной графики, где в большей степени используются целочисленные вычисления, их активно можно использовать, а вот для 3-мерной думаю будет малоэффективно на фоне обычных вычислений.
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
09.04.2015, 18:34  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
все верно
поясните пожалуйста в какой именно строке мы отсылаем экземпляр класса к процедурам из TGrObject

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm4.SendOut(obj:TGrObject);
var N:integer;
begin
  n:=GrObjects.IndexOf(obj);
  // Это послылка текущего состояния куда-нибудь
  m1.Lines.Add(FormatDateTime('hh:nn:ss',now)+ ' [' +inttostr(N+1)+'] '+ GrObjects[N].InfoStr);
end;
 
 
procedure TForm4.ProcessObject(obj:TGrObject);
begin
  Obj.First;
  while not obj.EOF do
  begin
    SendOut(obj);
    obj.Next;
  end;
end;
и вот "отправили"(перешли в него - этого я ещё не допонял) мы в TGrObject
и начинается выполнение всех процедур которые в нём есть, который относятся к экземпляру переданного класса?
Delphi
1
2
3
4
5
6
7
8
  TGrObject=class
  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;
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
09.04.2015, 20:39
Цитата Сообщение от aypinki2 Посмотреть сообщение
послылка текущего состояния куда-нибудь
задача ставилась чтобы посылать куда-то например в порт, в космос, в посольство дружественной страны
каждый шаг расчета
поэтому объекты обзавелись состоянием
мы ввели набор процедур
First - поставить на начало
Next - перейти к следующей
Eof - не конец ли расчета уже?
CurStep - номер шага алгоритма
на каждом шаге мы определили как вычислить состояние (координаты и цвет) нашего объекта

Сам объект ничего не рисует, никуда не выводит, он просто хранит информацию о себе. все операции над ним делает внешний контроллер - в данном случае форма
в методе ProcessObject мы устанавливаем объект в начало алгоритма и в цикле делаем шаг по алгоритму, объект рассчитывает свое состояние на этом шаге, мы отсылаем его состояние куда-то. в данном случае просто в мемо, для иллюстрации
повторяем шаги алгоритма, пока не наступит "всё" - eof

то же самое мы делаем с остальными объектами

Цитата Сообщение от aypinki2 Посмотреть сообщение
отсылаем экземпляр класса к процедурам из TGrObject
я не понял вопрос. терминология неизвестна мне...
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 138
Записей в блоге: 1
09.04.2015, 20:59  [ТС]
вы не поверите, я разобрался
Цитата Сообщение от krapotkin Посмотреть сообщение
я не понял вопрос. терминология неизвестна мне...
мне была не понятна вот эта строка
Delphi
1
  obj.Next;
я думал это просто инкремент какой то, а оказалось это и есть основной кусок -расчет наших величин.

теперь, если соизволите, вопросы)

Delphi
1
2
3
4
5
6
7
8
9
10
TLine = class(TGrObject)
  private
    FD:TPoint3;
    FS:TPoint3;
    FCurPoint:TPoint3;
    FObmen:boolean;
    FO:Single;
    FOz:Single;
    FCurStep:integer;
  public
- здесь в private мы засовываем переменные которые буду "видны" во всех процедурах и функциях класса TLine ?
и главный вопрос - например, будет еще элемент но уже другой, не Tline, а TCircle , как организовать этот цикл где "если экземпляр есть TCircle то делай то то" где как раз та развилка которая будет направлять программу(или как её можно организовать)
а как вы делаете так, что кусочки кода можно "сложить" в 1 строку?(там справа по коду плюсик появляется)
да, и сейчас задача у меня чуть чуть другая, я записываю в массив.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
09.04.2015, 21:08
Цитата Сообщение от aypinki2 Посмотреть сообщение
здесь в private
да
Цитата Сообщение от aypinki2 Посмотреть сообщение
кусочки кода можно "сложить"
ничего не делаю, у меня стоит Delphi XE7 c пакетом CnWizards
Цитата Сообщение от aypinki2 Посмотреть сообщение
записываю в массив
ничего не меняется, если мы вместо мемо будем писать в массив
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.04.2015, 21:08

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Лето уходит
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 Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru