• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

По вопросу построения эллипсов

Автор 6o6auko, 07.07.17, 19:27:05

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

bull

10.07.17, 11:01:25 #20 Последнее редактирование: 10.07.17, 11:12:51 от bull
Цитата: YNA от 10.07.17, 07:43:13Нужно построить эллипс по трём точкам как показано на первом рисунке. Инструментами эллипса такое сделать нельзя, но при желании можно.
Можно, но нельзя  :) Представь эти три точки тремя крайними точками эллипса. И получишь то, что в приложении. А промежуточных вариантов бесконечное множество.

PS Прошу прощения. Вы, оказывается, как раз множество вариантов и обсуждаете

Starik

Один из наших пользователей почему то постеснялся добавить ещё несколько ссылок касательно обсуждаемой темы. Делаю это за него.
ЦитироватьАлексей Павлович Доброе утро!
Добавьте пожалуйста ещё две ссылки из Википедии: На овал https://ru.m.wikipedia.org/wiki/%D0%9E%D0%B2%D0%B0%D0%BB
И на окружность: https://ru.m.wikipedia.org/wiki/%D0%9E%D0%BA%D1%80%D1%83%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D1%8C
В окружности мне понравилась тема: " Аналитическая геометрия окружности" , особенно ссылка на "Коническое сечение". там даже видео вложено.
сечения конуса, https://ru.m.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5/quote]

bull

Цитата: YNA от 10.07.17, 10:49:20Конечная цель - эллипс с бесконечной осью то есть парабола. Для параболы указанная площадь находится элементарно:
(X^2/2 - X^3/3) x K^2 = 133,3333... ,где К - коэффициент перевода от относительных единиц к миллиметрам.
Усомнюсь в этом. Чем больше эта ось, тем больше участок эллипса приближается к отрезку. При бесконечно большой оси площадь треугольника равна (10*20)/2 = 100. И площадь по картинке как раз и будет бесконечно стремиться к этой цифре (но не достигать - потому, что всё-таки до отрезка не дойдёт).

bull

Цитата: Starik от 10.07.17, 11:04:29ссылка на "Коническое сечение"
Необходимо поправить текст ссылки. Там замыкание цитаты как часть ссылки прошла.

YNA


Aleksei

Внесу свою лепту в клуб любителей эллипсов  :)

Цитата: bull от 10.07.17, 10:06:54
Кстати, вот эллипсы и овалы в АКАД и Компас. Если кому интересно. При том всё равно считается, что в САПР (любом) строится не идеальный эллипс, а просто что-то близкое к нему.

Это не так.  Зачем САПР-системе строить "что-то близкое", если можно построить именно эллипс - кривую, которая описывается известными параметрическими уравнениями и в этом смысле не сложнее окружности?
Для примера я набросал на Пайтоне макрос, который работает в два этапа. Вначале рассчитываются и выводятся координаты точек эллипса по известным из математики формулам. Затем, уже с помощью команды "Эллипс" геометрического ядра, сверху строится сама кривая.
Попробуйте, даже на пределе масштаба, найти хоть какую-то погрешность. Кривая - это именно теоретический эллипс, построенный без всяких приближений, они в данном случае не нужны.
Это в нашем, человеческом, понимании есть разница, что строить. Для окружности возьмем циркуль, а вот эллипс - это уже что-то сложное и нужно как-то подбирать.
САПР-системе все равно - для построения кривой (в том числе и  окружности) ей нужна формула, по которой определяется координата каждой точки. И если такая формула есть, то кривая не будет отличаться от теоретической. Если, конечно, не учитывать особенности представления в компьютере чисел с плавающей запятой и прочие нюансы.
Различные приближения могут быть там, где кривую или поверхность невозможно представить аналитической зависимостью.
Кстати, на isicad.ru тоже изучают эллипсы и овалы  88)) :
http://isicad.ru/ru/articles.php?article_num=19284

# -*- coding: cp1251 -*-
# построение эллипса
import Kompas10API5 as KAPI
import pythoncom
from win32com.client import Dispatch
import LDefin2D
import LDefin3D
import MiscellaneousHelpers as MH
import math

iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)
iKompasObject.Visible = True
iDocument2D = iKompasObject.ActiveDocument2D()

if iDocument2D is None:
    iKompasObject.ksMessage("Откройте (создайте) фрагмент или чертеж Компас-3D")
    exit(0)

try:
    # исходные данные
    # ==================================
    x0 = 120  # координата x центра эллипса
    y0 = 130  # координата y центра эллипса
    a = 50  # первая полуось
    b = 25  # вторая полуось
    phi = 30 # угол наклона эллипса
    n = 64  # количество расчетных точек
    # ==================================

    # начальное значение угла
    t = 0
    # конечное значение угла
    tmax = 2 * math.pi
    # угловой шаг в радианах
    step = (2 * math.pi) / n
    # угол наклона в радианах
    phir = phi * math.pi / 180

    # цикл от 0 до 360 градусов
    while t <= tmax:
        # расчет точки на кривой
        x = a * math.cos(t)
        y = b * math.sin(t)
        # поворот точки
        x1 = x * math.cos(phir) - y * math.sin(phir)
        y1 = x * math.sin(phir) + y * math.cos(phir)
        # сдвиг точки
        x = x1 + x0
        y = y1 + y0
        # вывод в консоль координаты точки
        print('t = ' + ("%.3f" % t) + ';  x = ' + ("%.3f" % x) + ';  y = ' + ("%.3f" % y))
        # построение точки по координатам
        iDocument2D.ksPoint(x, y, 0)
        t += step

    # строим эллипс поверх точек
    iObjParam = KAPI.ksEllipseParam(iKompasObject.GetParamStruct(LDefin2D.ko_EllipseParam))
    iObjParam.Init()
    iObjParam.xc = x0
    iObjParam.yc = y0
    iObjParam.A = a
    iObjParam.B = b
    iObjParam.angle = phi
    iObjParam.style = 1
    obj = iDocument2D.ksEllipse(iObjParam)

except:
    print("Ошибка")

bull

11.07.17, 07:54:09 #26 Последнее редактирование: 11.07.17, 08:11:49 от bull
Цитата: Aleksei от 10.07.17, 22:57:33Зачем САПР-системе строить "что-то близкое", если можно построить именно эллипс
Затем, что точность эллипса зависит от количества опорных точек, взятых за основу при построении графики. В отличие от отрезков, дуг и овалов, где опорных точек минимум. Т.е. эллипс по сути - сплайн, описанный формулой. А когда профиль кривой требует множества опорных точек (стремящихся к бесконечности), то в любом случае будет происходить аппроксимация в той или иной мере. Да, отклонения от теоретического профиля могут быть ничтожны, но они будут.

Вспомните, как в ВУЗе строили подобные профили. Задаемся как можно бо'льшим количеством точек и "на глаз" проводим плавную линию между ними. Вы же не будете утверждать, что профиль при этом получается идеальный? Так и с САПР. Только точность побольше.

PS А окружность некоторые даже на бумаге умудряются ручкой провести идеально.

ТрындецЪ

Цитата: bull от 11.07.17, 07:54:09
Затем, что точность эллипса зависит от количества опорных точек, взятых за основу при построении графики. В отличие от отрезков, дуг и овалов, где опорных точек минимум. Т.е. эллипс по сути - сплайн, описанный формулой. А когда профиль кривой требует множества опорных точек (стремящихся к бесконечности), то в любом случае будет происходить аппроксимация в той или иной мере. Да, отклонения от теоретического профиля могут быть ничтожны, но они будут.
Доказательством этого может быть эллипс, который я выложил на предыдущей странице. Хотя математически площадь сектора должна стремиться к 133,(3), КОМПАС показывает разброс значений площади (даже в минус) при приближении к этому пределу. Это можно объяснить только аппроксимацией.

YNA

- Постройте эллипс по размерам. показанным на рисунке. Такие размеры удобны тем, что все параметры эллипса выражаются целыми числами.
- Поставьте произвольные точки на кривой, например на рисунке 1 и 2.
- Измерьте с точностью до 10 знака сумму расстояний от фокусов до любой точки. (см. рис)
Если предположить, что это аппроксимация, то точность её должна быть просто фантастическая! Думаю компасу будет намного легче просто построить правильную кривую по заданному уравнению, чем возится с такой прецизионной аппроксимацией.  :)

bull

Цитата: ТрындецЪ от 11.07.17, 08:35:09Хотя математически площадь сектора должна стремиться к 133,(3),
я там писал уже, что на самом деле не 133.3, а 100 (при бесконечном значении полуоси.). А так, да, аппроксимация имеет значение.

YNA, рисунок доказывает только то, что аппроксимация идет по максимально достижимой точности. И ещё... Есть такой момент, как "самоконтроль". Проверка самого себя всегда выдаст абсолютный результат (если не заложено упрощенной отрисовки какой, влияющей на ступенчатость контура). Другое дело - сравнение одних и тех же кривых из разных САПР в одной нейтральной программе. Вот тогда и можно будет судить о степени аппроксимации. (Это ни в коем случае не призыв к действию  :) )

YNA

Цитата: bull от 11.07.17, 09:37:07
я там писал уже, что на самом деле не 133.3, а 100 (при бесконечном значении полуоси.).
Кривая второго порядка (эллипс, окружность, парабола), построенная по трём точкам, ни когда не может быть аппроксимирована отрезками. Указанные три точки уже задают кривизну, однозначную для окружности и параболы и неоднозначную для эллипса.
Легче показать на примере.
На рисунке слева показана парабола, построенная по трём указанным точкам. Она единственная и неповторимая. Тут же указаны все интересующие нас параметры.
Справа показан эллипс с длиной оси 2000 мм (больше трудно строить)  :) По размерам 39,7 и 2,49 легко понять, что дуга эллипса более выпукла чем парабола в указанном диапазоне и, соответственно, площадь закрашенного участка у эллипса больше. Увеличивая длину оси до бесконечности будем бесконечно приближаться к параболе, но ни как не к отрезку (показан на рисунке эллипса штриховой линией).
Возможно есть какое то строгое математическое доказательство этому, не знаю.  :shu:
+ Благодарностей: 1

bull

11.07.17, 11:46:58 #31 Последнее редактирование: 11.07.17, 13:13:48 от bull
Цитата: YNA от 11.07.17, 11:41:512000 мм (больше трудно строить)
так в этом-то и вся соль. Математически тоже не могу формульно доказать, но убеждение всё-таки есть, что стремиться будет именно к 100. Впрочем, никто от ошибок не застрахован и заблуждений. :)

PS Построил в автокаде, ось 50 000. Площадь 133.31. Можно ещё больше, там ограничений нет :) Но цифра уже меньше 133.3(3)

PS Всё-таки ошибся, похоже. Построил с полуосью в миллион (!!!). Дает значение площади 133.3291 (больше предыдущего значения т.е.). Стало быть, просто аппроксимация уже влияет и цифра 133.3(3) верная.

ТрындецЪ

Любая кривая строится по точкам. Даже окружность - это множество точек, равноудаленных от точки называемой центром. Какое бы число точек для построения мы не выбрали, если мы постоянно будем увеличивать масштаб приближения, то в конечном итоге между двумя соседними точками увидим пустоту.
КОМПАС нам строит не точки а кривую (в случае с эллипсом), проходящую через расчетные точки. Уж не знаю, сколько точек для построения он использует, но он их использует.
В случае, когда мы привязываем отрезки к эллипсу мы привязываемся к какой-то из этих расчётных точек, отсюда и точности в измерении расстояний до фокусов.

Aleksei

Цитата: bull от 11.07.17, 07:54:09
Затем, что точность эллипса зависит от количества опорных точек, взятых за основу при построении графики. В отличие от отрезков, дуг и овалов, где опорных точек минимум.
О каких опорных точках речь? Зачем они? Поймите, есть уравнения, которые позволяют вычислить любую точку кривой. С любым шагом. Геометрическое ядро представляет себе кривую не в виде массива точек на экране, как вам представляется, а в виде аналитической зависимости. Для адекватного отображения плавной кривой на экране система может рассчитать координаты любого экранного пиксела, каким бы маленьким или большим он не был. Допустим, если разрешение экрана небольшое, кривая будет выглядеть более "угловатой", но от этого расчеты с ней не станут менее точными.
Точно так же графическое ядро считает, например, точки пересечения кривых: аналитически, а не по тем линиям, которые нарисованы на экране. Экран вообще не нужен графическому ядру - он нужен только пользователю, для того, чтобы в интерактивном режиме с этим ядром общаться.
Насчет окружности поясню еще раз: для ее отображения системе необходимо рассчитывать столько же точек, сколько и для построения эллипса. Никакой разницы. Формулы даже одни и те же.

Цитата: bull от 11.07.17, 07:54:09
Т.е. эллипс по сути - сплайн, описанный формулой.
Тогда окружность, вероятно, это сплайн, не описанный формулой?  :o
Эллипс - это эллипс, а не сплайн. Сплайн - это тоже кривая, которая, в зависимости от типа сплайна, описывается своими системами уравнений. И точно так же по этим уравнениям рассчитывается и отображается.

Цитата: bull от 11.07.17, 07:54:09
Вспомните, как в ВУЗе строили подобные профили. Задаемся как можно бо'льшим количеством точек и "на глаз" проводим плавную линию между ними.
У САПР нет глаз. И проводить плавную линию, не рассчитав предварительно точки, она, в отличие от нас, не умеет.
+ Благодарностей: 1

6o6auko

Цитата: YNA от 11.07.17, 11:41:51
На рисунке слева показана парабола, построенная по трём указанным точкам. Она единственная и неповторимая.
А я могу по этим трем точкам еще две другие параболы построить  :) параметрические. Правда, они будут симметричными, но отличаться от первой.

ТрындецЪ

Aleksei, если это действительно так, то почему тогда КОМПАС (геометрическое ядро) не может корректно просчитать площадь в приведенном ранее мною примере?

Студент 2015

11.07.17, 22:22:39 #36 Последнее редактирование: 11.07.17, 22:37:53 от Студент 2015
Цитата: ТрындецЪ от 11.07.17, 20:27:57
Aleksei, если это действительно так, то почему тогда КОМПАС (геометрическое ядро) не может корректно просчитать площадь в приведенном ранее мною примере?
Первое что приходит в голову, то что у Вас и у YNA, центр эллипса ни как не определён. Ведь при построении в Компасе по трём точкам эллипса. Первое что спрашивает Компас это ввести центр, а затем уже координаты 3 точек. Ведь для расчётов нужны координаты точек от центра, а не расстояния между ними. Меняйте центр по оси х и проводите через эти точки столько эллипсов сколько Вам понравиться и подбирайте нужную точность площади сегмента.
Всего Доброго!!!

YNA

При наклонении осей площадь одной дольки будет стремиться к 100, а другой к бесконечности. При такой изначально некорректно поставленной задаче такое решение правильное! Для правильной постановки задачи нужно было задать условие минимизации суммарной площади долек.  :)

bull

Цитата: Aleksei от 11.07.17, 16:24:29Геометрическое ядро представляет себе кривую не в виде массива точек на экране, как вам представляется, а в виде аналитической зависимости.
Я прекрасно понимаю, что вы хотите сказать. И в какой-то мере это так и есть.

НО!!! Любой компьютер имеет ограниченные возможности. И САПР создаются с учетом этих возможностей. И расчет геометрии точек профиля не может быть бесконечно малым. Не надо относиться к компьютеру как к сферическому коню в вакууме. Да, при образмеривании периметра САПР даст точное значение, поскольку и размер будет ставиться с учетом того лимита, что есть на данный момент. А вот при расчете площадей и других опосредованных расчетов (пересечение двух сложных кривых там или ещё что) уже пойдут погрешности. Эти погрешности будут почти что ничтожны, но будут. И поэтому и говорю, что САПР строит кривую точно так же, как и мы на бумаге. Только точность много выше.

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

bull

Цитата: YNA от 12.07.17, 06:07:10
При наклонении осей площадь одной дольки будет стремиться к 100, а другой к бесконечности.
Конечно. Но задача была поставлена именно как без наклона осей.