Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Федя от 24-02-2017, 18:21:19

Название: есть ли возможность используя Matrix3d и Matrix2d решать уравнения
Отправлено: Федя от 24-02-2017, 18:21:19
Есть встроенные, наверное структуры, Autodesk.AutoCAD.Geometry.Matrix3d и Autodesk.AutoCAD.Geometry.Matrix2d, я так понимаю можно решать линейные уравнения используя autocad без сторонних библиотек?
Название: Re: есть ли возможность используя Matrix3d и Matrix2d решать уравнения
Отправлено: Александр Ривилис от 24-02-2017, 18:28:43
я так понимаю можно решать линейные уравнения используя autocad без сторонних библиотек?
Готовых алгоритмов в AutoCAD .NET API для решения линейных уравнений нет.
Название: Re: есть ли возможность используя Matrix3d и Matrix2d решать уравнения
Отправлено: Федя от 24-02-2017, 22:33:21
есть метод для получения детерминанта и обратной матрицы, смущает только заполнение матрицы, когда данные в одну строку, они не очень наглядны в представлении, возможно ли прикрутить перечислитель какой-нибудь чтобы были коэффициенты, то есть можно было в привычной манере задать элемент, подобно тому как приводятся в многочисленных примерах? 
Название: Re: есть ли возможность используя Matrix3d и Matrix2d решать уравнения
Отправлено: Александр Ривилис от 24-02-2017, 22:45:02
возможно ли прикрутить перечислитель какой-нибудь чтобы были коэффициенты, то есть можно было в привычной манере задать элемент, подобно тому как приводятся в многочисленных примерах? 
Прикрутить можно всё что угодно. Но эти матрицы предназначены только для конкретной цели - преобразования систем координат.
Название: Re: есть ли возможность используя Matrix3d и Matrix2d решать уравнения
Отправлено: Федя от 25-02-2017, 13:22:49
мне кажется они универсальны, даже больше чем может показаться на первый взгляд, попробую пример предоставить, инженерам может быть интересно решение задач в одной среде без всяких там обменных файлов
Название: Re: есть ли возможность используя Matrix3d и Matrix2d решать уравнения
Отправлено: Александр Ривилис от 25-02-2017, 17:46:51
Универсальный скорее Matrix3dBuilder, так как элементам Matrix3d нельзя присвоить значения (они read-only):

Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.Runtime;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.Geometry;
  4. using Autodesk.AutoCAD.EditorInput;
  5.  
  6. [assembly: CommandClass(typeof(Matrix3dOper.MyCommands))]
  7.  
  8. namespace Matrix3dOper
  9. {
  10.   public class MyCommands
  11.   {
  12.     [CommandMethod("TestMat")]
  13.     public void TestMat()
  14.     {
  15.       Document doc = Application.DocumentManager.MdiActiveDocument;
  16.       if (doc == null) return;
  17.       Editor ed = doc.Editor;
  18.       Matrix3d mat = ed.CurrentUserCoordinateSystem;
  19.       for (int i = 0; i < 4; i++) {
  20.         for (int j = 0; j < 4; j++)
  21.           ed.WriteMessage("UCS[{0}][{1}]={2,-12:N6}\t", i, j, mat[i, j]);
  22.         ed.WriteMessage("\n");
  23.       }
  24.       //////////////////////////////////////////////////////////////////////////
  25.       //  Присвоение типа 'mat[i,j] = значение' недопустимо,
  26.       //  т.к. доступ к элементу только для чтения
  27.       //  Для возможности модификации элементов вместо Matrix3d
  28.       //  следует использовать Matrix3dBuilder
  29.       //////////////////////////////////////////////////////////////////////////
  30.  
  31.       Matrix3dBuilder matb = new Matrix3dBuilder(mat);
  32.       for (int i = 0; i < 4; i++)
  33.         for (int j = 0; j < 4; j++)
  34.           // Формируем единичную диагональную матрицу
  35.           matb[i, j] = (i == j) ? 1.0 : 0.0;
  36.       for (int i = 0; i < 4; i++) {
  37.         for (int j = 0; j < 4; j++)
  38.           ed.WriteMessage("matb[{0}][{1}]={2,-12:N6}\t", i, j, matb[i, j]);
  39.         ed.WriteMessage("\n");
  40.       }
  41.     }
  42.   }
  43. }

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F198303%2F7842324.7%2F0_150bcb_69bf5530_orig.png&hash=5e19294c895b565b84fba68d0b764ec7)

Название: Re: есть ли возможность используя Matrix3d и Matrix2d решать уравнения
Отправлено: trir от 25-02-2017, 20:02:40
del
Название: Re: есть ли возможность используя Matrix3d и Matrix2d решать уравнения
Отправлено: Александр Ривилис от 25-02-2017, 21:30:38
del
Это что было?
Название: Re: есть ли возможность используя Matrix3d и Matrix2d решать уравнения
Отправлено: trir от 26-02-2017, 11:40:23
помутнение сознания

мне кажется для расчётов лучше использовать более удобные вещи, например ipython (https://ipython.org/) - его и с AutoCAd можно подружить  (https://pypi.python.org/pypi/pyautocad/)
Название: Re: есть ли возможность используя Matrix3d и Matrix2d решать уравнения
Отправлено: Федя от 27-02-2017, 08:20:46
спасибо, я ведь правильно понимаю, что Autodesk.AutoCAD.Geometry.Matrix2d это матрица 3х3, а Autodesk.AutoCAD.Geometry.Matrix3d 4х4
Название: Re: есть ли возможность используя Matrix3d и Matrix2d решать уравнения
Отправлено: Александр Ривилис от 27-02-2017, 15:35:14
спасибо, я ведь правильно понимаю, что Autodesk.AutoCAD.Geometry.Matrix2d это матрица 3х3, а Autodesk.AutoCAD.Geometry.Matrix3d 4х4
Это вопрос или утверждение? Если вопрос - то ответ "Да".
Название: Re: есть ли возможность используя Matrix3d и Matrix2d решать уравнения
Отправлено: Федя от 28-02-2017, 11:32:18
да был вопрос, кстати Autodesk.AutoCAD.Geometry.Matrix2d и Autodesk.AutoCAD.Geometry.Matrix3d имеют конструктор принимающий параметры ввиде массива
Название: Re: есть ли возможность используя Matrix3d и Matrix2d решать уравнения
Отправлено: Федя от 28-02-2017, 11:48:14
помутнение сознания
у меня как у инженера есть работа основная, у меня беда с математикой, приходится догонять и осваивать питоны, явы, лиспы и дружить их мне некогда. В идеале вся работа должна делаться, у меня, оговорюсь, в одной среде, код должен быть максимально короткий, там где есть метод получения детерминанта, должен быть метод в одну строку, чтобы через два года отсутствия практики  я мог взглянуть на него и понять что это то что нужно