Для начала нужно нормально сформулировать задачу. Из рисунка я только понял, что нужно находить разность координат X точек.
1. Предполагаю, вначале нужно создать точки на горизонтальных линиях в начале и в конце, запомнить их.Как-то уж очень всё запутано. Мне видится эта задача значительно проще. Нужно найти все точки пересечении ипоместить их в "массив". Массив отсортитровать по координате X. И этого судя по тому, что я вижу должно быть достаточно.
2. Создать точки пересечения линий, запомнить их.
3. Вычислить расстояния между этими точками, расстояния занести в массив (должно быть два разных массива - один до пересечения, другой после пересечения, как я писал выше).
Нужно найти все точки пересечении ипоместить их в "массив". Массив отсортитровать по координате X. И этого судя по тому, что я вижу должно быть достаточно.
но и координаты начала и конца секущейся линии тоже нужно найти и поместить в "массив"?Да.
Да.
p.s. возможно даже точки не нужно создавать, а может быть просто создать новые линии на уже существующих до пересечения с секущей линией и после нее. возможно это будет на мой взгляд проще.И даже это не нужно. Имея координаты (X и Y) начала и конца и используя основы аналитической геометрии (на уровне школьного курса) вычисляется длина отрезка. Только судя по картинке нужна не длина отрезка, а длина проекции отрезка, т.е. разница координат X точек, о чем я уже в третий раз намекаю...
И даже это не нужно. Имея координаты (X и Y) начала и конца и используя основы аналитической геометрии (на уровне школьного курса) вычисляется длина отрезка. Только судя по картинке нужна не длина отрезка, а длина проекции отрезка, т.е. разница координат X точек, о чем я уже в третий раз намекаю...
А где бы почитать как в c#.net реализовано с линией пересеченияНе линия пересечения, а точка (или точки) пересечения. И в предложенном вами коде эти точки вычисляются в строке:
школьную геометрию никто не отменял..Как и правило форматирования кода на нашем форуме. Это правило у меня в подписи.
Не линия пересечения, а точка (или точки) пересечения. И в предложенном вами коде эти точки вычисляются в строке:
Вот пример, который дальше будешь "допиливать" для себя:
Не понял. Если запишешь видео, то надеюсь, что пойму...Вот пример, который дальше будешь "допиливать" для себя:
Пример работает, но если первой выбрать "очередную линию", а в качестве очередной "основную", иначе дельта x = 0. Cпасибо!
2. Ну тут всё понятно и программа работает именно так, как задуманно. Основная линия, с которой ты пересекал остальные, имеет почти вертикальный кусок. Поэтому и расстояние по X (почти) равно 0.
Я и хотел разобраться как работает этот метод IntersectWith, где можно поподробнее с ним познакомитьсяЭтот метод просто находит точки пересечения примитивов в AutoCAD.
если я хочу получать проекции на ось Х от секущей "основной линии" если она в горизонтальном и в вертикальном расположении?А это совершенно отдельная задача и методом IntersectWith её не решают.
Код - vb.net [Выбрать]Всё описано в документации:
mainCurve.IntersectWith(secondCurve, Intersect.OnBothOperands, pts, IntPtr.Zero, IntPtr.Zero);
что есть что в этой записи, особенно после Intersect..
Entity entityPointer Input entity with which "this" entity is to intersectЧто именно здесь непонятно?
Autodesk.AutoCAD.DatabaseServices.Intersect intersectType Input type of intersection requested
Point3dCollection points Output with the points of intersection appended
IntPtr thisGraphicSystemMarker Input GS marker of subentity of "this" entity that's involved in the intersection operation. Use the 0 default if not applicable.
IntPtr otherGraphicSystemMarker Input GS marker of subentity of the entity pointed to by entityPointer that's involved in the intersection operation. Use the 0 default if not applicable.
А это совершенно отдельная задача и методом IntersectWith её не решают.
таак, а где почитать поподробнее как решить мне ее? Спасибо.Собственно говоря нигде такого почитать нельзя. Это чистая аналитическая геометрия. В AutoCAD .NET API можно воспользоваться Autodesk.AutoCAD.Geometry. Например:
Например:Спасибо, буду изучать в этом направлении.
1) Autodesk.AutoCAD.Geometry.Line3d для создания бесконечной прямой, на которую будем проецировать точку
2) Воспользуемся методом GetProjectedClosestPointTo(Point3d pt /* точка, которую проецируем */, Vector3d norm /* вектор проекции */)
Или:
1) Создаём плоскость Autodesk.AutoCAD.Geometry.Plane с началом в одной из точек прямой для проекции и вектором нормали Vector3d.ZAxis
2) Используем метод Point3d.OrthoProject для получения проекции точки на прямую.
Воспользуемся методом GetProjectedClosestPointTo(Point3d pt /* точка, которую проецируем */, Vector3d norm /* вектор проекции */)Не нашел никаких примеров как пользоваться этим методом, кроме