SolidWorks: вопросы, советы, обсуждение

Да. Основная засада, конечно, в том, что штатными средствами SolidWorks можно нарисовать только “круглую” спираль. А хотелось “квадратную”.
Наверное самый правильный вариант: в Солиде есть инструмент “Кривая, управляемая уравнением”. Т.е. надо создать трёхмерный эскиз и написать систему уравнений для X, Y и Z координат. Только мой уровень познания математики не позволил это сделать. Я даже ИИ “подрюкал” на эту тему. Но они не справились (ДипСик, Клод и Квен).

Решил делать “в лоб” - если в двух словах: нарисовать один виток спирали, а потом сделать круговой массив из этих витков. Т.е. так:

Сперва трёхмерный эскиз “пути” витка

плюс эскиз сечения провода (это просто окружность диаметром 2 мм).

Затем “вытянул” второй по пути первого и получил один “виток” (твердое тело)

Нарисовал “путь” для будущего кругового массива. По сути это линия через центр поперечного сечения тора.

Ну и сам массив, управляемый кривой:

3 лайка

Еще вот такой изврат получился, но это 1 двумерный эскиз и круговой массив.
Края можно закруглить, но все равно получается кривовато, уж лучше действительно 3хмерный эскиз и массив

1 лайк

Я считаю, что мой вариант тоже изврат. По причине того, что при создании массива нужно подгонять так, чтобы элементы “сошлись”. Т.е. чтобы каждый следующий был как бы продолжением предыдущего.

При таком подходе любой шаг в сторону и конструкция “рушится”. Ну типа захотелось сделать другое число витков.

Но пока не могу придумать как нарисовать неразрывную кривую пути для создания элемента.

1 лайк

Ребята, оба вы «извращены», но «а как иначе»? :slight_smile:
Это хорошее решение.

  1. Применили фантазию
  2. Применили имеющиеся знания
  3. Даже если это «гамно по версии дезайнеров». Во-первых, причем тут дизайн? Во вторых - дизайнеры такое не повторят (испортят чем либо).

А лично я считаю - молодцы!!!

1 лайк

Кстати, @andriano (вроде бы, не знаю точно) и @WladDrakula (это точно) - хорошо знают математику. Может «ради интереса» подключатся?

1 лайк

Подключаться к чему?
Тема про SolidWorks, а не про математику.
SolidWorks’а у меня нет. Чем я могу помочь?

Ну это же не главное
Вот тут «вопрос»:

:slight_smile:

Хорошо, давай разбирать вопрос:

Что такое трехмерный эскиз и как его создать?

У Дракулы пятничный дзен, видимо ))

вообще не знаю, чем могу помочь? Я не увлекался еще 3д рисованием… не зацепило пока что. формулу спирали в полярных координатах - ну тут самостоятельно… начинаешь с сечения тоже в полярных - от центра сечения, а потом переносишь в трехмерные полярные, задавая шаг.

Собственно SolidWorks умеет строить кривую на основе параметрических уравнений.

Для примера парабола:

Синусоида:

В конце концов спираль в пространстве:

А дальше - “полный привет”. Ну не знаю я как спроецировать движение точки на квадрат и плюс сместить каждый следующий квадрат по окружности.
В школе этого не проходили :slight_smile:

2 лайка

Дополню с другой точки зрения - не математика, а программиста.
Сначала делаешь инструментарий - библиотечку для работы с однородными координатами: создание матрицы поворота, создание матрицы параллельного переноса, создание матрицы масштабирования и функцию перемножения матриц.
Потом вводишь параметр t и реализуешь абсолютно любые x(t), y(t), z(t).

Вот картинка

вот код на Питоне (юпитер ноутбук)

import numpy as np
import plotly.graph_objects as go

# -----------------------------
# параметры 
# -----------------------------
a = 1.0          # полуразмер квадрата
n = 12           # степень (больше => ближе к квадрату)
N = 70           # число витков
R = 4.0          # большой радиус тора
samples = 32000  # точек на всю кривую
frames_count = 90

# -----------------------------
# профиль КВАДРАТА в плоскости XZ
# -----------------------------
def square_profile(phi, a=1.0, n=16):
    x = a * np.sign(np.cos(phi)) * np.abs(np.cos(phi))**(2/n)
    z = a * np.sign(np.sin(phi)) * np.abs(np.sin(phi))**(2/n)
    return x, z

# -----------------------------
# тороидальная намотка
# -----------------------------
psi = np.linspace(0, 2*np.pi, samples)
phi = N * psi

xq, z = square_profile(phi, a=a, n=n)
rad = R + xq

x = rad * np.cos(psi)
y = rad * np.sin(psi)

# -----------------------------
# фиксируем масштаб (важно!)
# -----------------------------
lim_xy = (R + a) * 1.15
lim_z  = a * 5.0        # <-- ключевое изменение: визуально растягиваем Z

# -----------------------------
# анимация: наращивание линии
# -----------------------------
idx = np.linspace(2, samples, frames_count).astype(int)

frames = []
for k, m in enumerate(idx):
    frames.append(go.Frame(
        name=str(k),
        data=[
            go.Scatter3d(
                x=x[:m], y=y[:m], z=z[:m],
                mode="lines",
                line=dict(width=5),
                name="winding"
            )
        ]
    ))

fig = go.Figure(
    data=frames[0].data,
    frames=frames
)

fig.update_layout(
    title=f"Тороидальная обмотка (квадрат): N={N}, n={n}, R={R}",
    scene=dict(
        aspectmode="manual",
        aspectratio=dict(x=1, y=1, z=1),  # геометрия честная
        xaxis=dict(range=[-lim_xy, lim_xy], visible=False),
        yaxis=dict(range=[-lim_xy, lim_xy], visible=False),
        zaxis=dict(range=[-lim_z,  lim_z ], visible=False),
    ),
    updatemenus=[dict(
        type="buttons",
        showactive=False,
        buttons=[
            dict(
                label="▶",
                method="animate",
                args=[None, {
                    "frame": {"duration": 30, "redraw": True},
                    "fromcurrent": True,
                    "transition": {"duration": 0},
                    "mode": "immediate"
                }]
            ),
            dict(
                label="⟲",
                method="animate",
                args=[[str(0)], {
                    "frame": {"duration": 0, "redraw": True},
                    "transition": {"duration": 0},
                    "mode": "immediate"
                }]
            ),
        ]
    )]
)

fig.show()

вот ссылка на гугль колаб, чтобы посмотреть

Фотмулы

1 лайк

Вот вам скучно, голову себе ломаете без нужды ))

  1. Мозги должны работать.
  2. И правда скучно. Жду детали с Али, хочу свою установку для печати плат немного переделать.

@WladDrakula спасибо, только этот долбаный софт не понимает половину математических общепринятых функций.
Например нет функции max(a,b).
Я писал, что “мучал” ИИ на эту тему. ДипСик в конце концов нашёл способ другой аппроксимации.

Для себя считаю вопрос закрыт.

1 лайк

Как то скачут витки по размеру …

Это «3д иллюзия».