Волнистая прокладка

Автор semenkontorovskij, 17.09.15, 11:59:08

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

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

semenkontorovskij

При создании предложенной прокладки я использовал кривые по закону, описывающие ОДНУ волну поверхности.

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

YNA

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

Vitalij Lysanov

Кривую по закону можно построить.
Нужно точное число pi или константу.
x от 0 до 2*pi
y от 0 до 2*pi
z от 0 до 2*pi     ???

x=sin(t)
y=cos(t)
z=0.2*sin(t/12)

Я собственно использовал Макрос.

Чистая деталь.
Макросы. Начать запись. Построить любую линию в пространстве.
Остановить запись.
Редактировать Макрос.

Часть то что там будет, заменить на такое.

iCurveByLaw.SetTMin(CONST3D7.constants.ksCLawX, 0.00000000000)
iCurveByLaw.SetTMin(CONST3D7.constants.ksCLawY, 0.00000000000)
iCurveByLaw.SetTMin(CONST3D7.constants.ksCLawZ, 0.00000000000)

iCurveByLaw.SetTMax(CONST3D7.constants.ksCLawX, 2*math.pi)
iCurveByLaw.SetTMax(CONST3D7.constants.ksCLawY, 2*math.pi)
iCurveByLaw.SetTMax(CONST3D7.constants.ksCLawZ, 2*math.pi)

iCurveByLaw.SetExpression(CONST3D7.constants.ksCLawX, 'sin(t)')
iCurveByLaw.SetExpression(CONST3D7.constants.ksCLawY, 'cos(t)')
iCurveByLaw.SetExpression(CONST3D7.constants.ksCLawZ, '0.2*sin(t*12)')

Еще для pi нужно добавить импорт math 
import math


На макросах вроде наглядней.
Сюда можно добавить как из линии получить объем.
Если можно подробности как из линии получить такую красивую деталь..

Vitalij Lysanov

Извиняюсь про поверхность просмотрел.
На макросах получается только две линии, остальное руками.
Код макроса в приложении.

Вторая линия больше на 1,2

# -*- coding: cp1251 -*-
#|si
import math
import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom
from win32com.client import Dispatch
import LDefin2D
import LDefin3D
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH



iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)
MH.iKompasObject = iKompasObject

iApplication = Dispatch('KOMPAS.Application.7')
iApplication = KAPI7.IApplication(iApplication)
MH.iApplication = iApplication

iDocument3D = iKompasObject.ActiveDocument3D()

iDocument = iApplication.ActiveDocument
iKompasDocument3D = KAPI7.IKompasDocument3D(iDocument)

iPart7 = iKompasDocument3D.TopPart
iPart = iDocument3D.GetPart(LDefin3D.pTop_Part)
iAuxiliaryGeomContainer = iPart7._oleobj_.QueryInterface(KAPI7.NamesToIIDMap['IAuxiliaryGeomContainer'], pythoncom.IID_IDispatch)
iAuxiliaryGeomContainer = KAPI7.IAuxiliaryGeomContainer(iAuxiliaryGeomContainer)
iCurveByLaws = iAuxiliaryGeomContainer.CurveByLaws
iCurveByLaw = iCurveByLaws.Add()
iCurveByLaw.PointsType = CONST3D7.constants.ksPParamCoord
iCurveByLaw.SetLawType(CONST3D7.constants.ksCLawX, CONST3D7.constants.ksTLawByExpression)
iCurveByLaw.SetLawType(CONST3D7.constants.ksCLawY, CONST3D7.constants.ksTLawByExpression)
iCurveByLaw.SetLawType(CONST3D7.constants.ksCLawZ, CONST3D7.constants.ksTLawByExpression)
iCurveByLaw.SetTMin(CONST3D7.constants.ksCLawX, 0.00000000000)
iCurveByLaw.SetTMin(CONST3D7.constants.ksCLawY, 0.00000000000)
iCurveByLaw.SetTMin(CONST3D7.constants.ksCLawZ, 0.00000000000)
iCurveByLaw.SetTMax(CONST3D7.constants.ksCLawX, 2*math.pi)
iCurveByLaw.SetTMax(CONST3D7.constants.ksCLawY, 2*math.pi)
iCurveByLaw.SetTMax(CONST3D7.constants.ksCLawZ, 2*math.pi)
iCurveByLaw.SetExpression(CONST3D7.constants.ksCLawX, 'sin(t)')
iCurveByLaw.SetExpression(CONST3D7.constants.ksCLawY, 'cos(t)')
iCurveByLaw.SetExpression(CONST3D7.constants.ksCLawZ, '0.2*sin(t*12)')
iCurveByLaw.Update()

iPart7 = iKompasDocument3D.TopPart
iPart = iDocument3D.GetPart(LDefin3D.pTop_Part)
iAuxiliaryGeomContainer = iPart7._oleobj_.QueryInterface(KAPI7.NamesToIIDMap['IAuxiliaryGeomContainer'], pythoncom.IID_IDispatch)
iAuxiliaryGeomContainer = KAPI7.IAuxiliaryGeomContainer(iAuxiliaryGeomContainer)
iCurveByLaws = iAuxiliaryGeomContainer.CurveByLaws
iCurveByLaw = iCurveByLaws.Add()
iCurveByLaw.PointsType = CONST3D7.constants.ksPParamCoord
iCurveByLaw.SetLawType(CONST3D7.constants.ksCLawX, CONST3D7.constants.ksTLawByExpression)
iCurveByLaw.SetLawType(CONST3D7.constants.ksCLawY, CONST3D7.constants.ksTLawByExpression)
iCurveByLaw.SetLawType(CONST3D7.constants.ksCLawZ, CONST3D7.constants.ksTLawByExpression)
iCurveByLaw.SetTMin(CONST3D7.constants.ksCLawX, 0.00000000000)
iCurveByLaw.SetTMin(CONST3D7.constants.ksCLawY, 0.00000000000)
iCurveByLaw.SetTMin(CONST3D7.constants.ksCLawZ, 0.00000000000)
iCurveByLaw.SetTMax(CONST3D7.constants.ksCLawX, 2*math.pi)
iCurveByLaw.SetTMax(CONST3D7.constants.ksCLawY, 2*math.pi)
iCurveByLaw.SetTMax(CONST3D7.constants.ksCLawZ, 2*math.pi)
iCurveByLaw.SetExpression(CONST3D7.constants.ksCLawX, '1.2*sin(t)')
iCurveByLaw.SetExpression(CONST3D7.constants.ksCLawY, '1.2*cos(t)')
iCurveByLaw.SetExpression(CONST3D7.constants.ksCLawZ, '0.2*sin(t*12)')
iCurveByLaw.Update()






Вячеслав

Цитата: semenkontorovskij от 17.09.15, 11:59:08
При создании предложенной прокладки я использовал кривые по закону, описывающие ОДНУ волну поверхности.

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

Как я понял из рисунка, Вы используете полярную систему координат.

Для неё кривая (синусоида на боковой поверхности цилиндра) описывается так:
по Z: С*sin(K*t), где С - полувысота синусоиды, К - кол-во выгибов
по А: t
по R: sqrt(V^2+C^2*(sin(K*t))^2), где V - радиус проекции окружности, вписанной в кривую

Строите 2 кривых, дальше - надеюсь, что справитесь...

semenkontorovskij

Цитата: Vitalij Lysanov от 17.09.15, 13:01:48
Кривую по закону можно построить.
Нужно точное число pi или константу.
x от 0 до 2*pi
y от 0 до 2*pi
z от 0 до 2*pi     ???

x=sin(t)
y=cos(t)
z=0.2*sin(t/12)

Я собственно использовал Макрос.

Чистая деталь.
Макросы. Начать запись. Построить любую линию в пространстве.
Остановить запись.
Редактировать Макрос.

Часть то что там будет, заменить на такое.

iCurveByLaw.SetTMin(CONST3D7.constants.ksCLawX, 0.00000000000)
iCurveByLaw.SetTMin(CONST3D7.constants.ksCLawY, 0.00000000000)
iCurveByLaw.SetTMin(CONST3D7.constants.ksCLawZ, 0.00000000000)

iCurveByLaw.SetTMax(CONST3D7.constants.ksCLawX, 2*math.pi)
iCurveByLaw.SetTMax(CONST3D7.constants.ksCLawY, 2*math.pi)
iCurveByLaw.SetTMax(CONST3D7.constants.ksCLawZ, 2*math.pi)

iCurveByLaw.SetExpression(CONST3D7.constants.ksCLawX, 'sin(t)')
iCurveByLaw.SetExpression(CONST3D7.constants.ksCLawY, 'cos(t)')
iCurveByLaw.SetExpression(CONST3D7.constants.ksCLawZ, '0.2*sin(t*12)')

Еще для pi нужно добавить импорт math 
import math


На макросах вроде наглядней.
Сюда можно добавить как из линии получить объем.
Если можно подробности как из линии получить такую красивую деталь..

Там просто между двумя пространственными кривыми поверхность по сети кривых или линейчатая поверхность. И потом придание толщины и массив по концеентрической сетке.
+ Благодарностей: 1

semenkontorovskij

Цитата: Вячеслав от 17.09.15, 13:31:30
Как я понял из рисунка, Вы используете полярную систему координат.

Для неё кривая (синусоида на боковой поверхности цилиндра) описывается так:
по Z: С*sin(K*t), где С - полувысота синусоиды, К - кол-во выгибов
по А: t
по R: sqrt(V^2+C^2*(sin(K*t))^2), где V - радиус проекции окружности, вписанной в кривую

Строите 2 кривых, дальше - надеюсь, что справитесь...

Нет. Это прямоугольная система координат . Кривая задана параметрически :  X = f(t); Y = f(t); Z = f(t)

semenkontorovskij

Цитата: YNA от 17.09.15, 12:45:31
А можно саму детальку выложить, что бы не тратится на построения.

Пожалуйста:

Sprinter500

Вот если что моделька, может пригодится
+ Благодарностей: 1

Вячеслав

Цитата: semenkontorovskij от 17.09.15, 13:51:27
Нет. Это прямоугольная система координат . Кривая задана параметрически :  X = f(t); Y = f(t); Z = f(t)

Не, ну это тогда не для меня...  :-)))
Я конечно могу с помощью формул перехода вывести уравнения замкнутой кривой в декартовой системе координат, но...

semenkontorovskij

Цитата: Sprinter500 от 17.09.15, 13:53:44
Вот если что моделька, может пригодится

Большое спасибо )) Совсем забыл о цилиндрической системе координат )) Все на много  проще )))

Вячеслав

Пространственные кривые - весьма заманчивая вещь...  :shu: