Хранение вариантов в массиве для создания трехмерного массива - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть таблица данных точек Excel, которая описывает туннель.Я использую макрос для импорта этих точек в программе трехмерного моделирования (SolidWorks).Это очень ясно, что есть 18 профилей, которые составляют этот туннель.Задача, которую меня иногда просят сделать, - создать такую ​​модель данных, как эта.Это предполагает, что я создал закрытый сплайн для каждой из 18 точек профиля, а затем поднял этот замкнутый сплайн, чтобы сформировать твердое тело.

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

Я использую метод, чтобы найти углы между точками от центроида каждого профиля.

В Excel я сначала сортирую точки от минимального значения x до максимального значения x.Затем я использую цикл For для выполнения набора данных и условный оператор, чтобы увидеть, находится ли x_n + 1 - x_n ниже значения допуска, которое я установил.Если разница ниже допуска, то Point_n + 1 относится к набору предыдущих точек для профиля.В этом условном заявлении я также беру промежуточную сумму.Если разница превышает допуск, я вычисляю центр тяжести точек для этого профиля.

Проблема, с которой я столкнулся, заключается в том, что для того, чтобы вычислить угол между точками относительно точки центроида, янеобходимо использовать соответствующее значение центроида для каждого набора точек профилей.В моем условном выражении я храню значения x, y, z в варианте с именем data.Мне нужна помощь для хранения данных в массиве, чтобы я мог вспомнить для последующего использования, который создаст сплайны.Пример набора точек включен здесь

Dim rownum As Integer
Dim sh As Worksheet
Dim j As Integer
Dim k As Integer
Dim temp As Double
Dim yc As Double
Dim zc As Double
Dim temp2 As Variant
Dim xsum As Double
Dim ysum As Double
Dim zsum As Double
Dim a1 As Double
Dim a2 As Double
Dim data As Variant
Dim adiff As Double
Dim count As Integer

Set sh = ThisWorkbook.Sheets("Sheet1")

rownum = sh.Range("A1", sh.Range("A1").End(xlDown)).Rows.count
ReDim data(rownum, 3) As Variant


ysum = 0
zsum = 0

count = 0
For j = 1 To rownum - 1
    If j = 1 Then
        temp = 0
    Else
        temp = Abs(sh.Range("A" & j + 1).Value - sh.Range("A" & j).Value)
    End If

    If temp <= 2 Then
        data(j, 1) = sh.Range("A" & j).Value
        data(j, 2) = sh.Range("B" & j).Value
        data(j, 3) = sh.Range("C" & j).Value


        ysum = ysum + data(j, 2)
        zsum = zsum + data(j, 3)
        count = count + 1


        'Part.CreatePoint2 data(j, 1) / 1000, data(j, 2) / 1000, data(j, 3) / 1000
    ElseIf temp > 2 Then


        'calculate centroid
        yc = (ysum + sh.Range("B" & j).Value) / rownum
        zc = (zsum + sh.Range("C" & j).Value) / rownum


        'a1 = ATan2(data(j, 2) - yc, data(j, 3) - zc)
        'a2 = ATan2(data(j + 1, 2) - yc, data(j, 3) - zc)

        'adiff = a1 - a2


        ysum = 0
        zsum = 0

    End If

Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...