Цветы Опубликовано 24 мая, 2008 Поделиться #51 Опубликовано 24 мая, 2008 Честно я сначало написала Pi/4оспринила как наклон на 45А потом когда представила что всетаки 90 должно быть забыла вписать значение назадА вот что писать надо было Pi-3.1415 я подумала что здесь должно меняться значение в зависимости от поворота угла Вобщем попробую построить что-либо еще чтобы понять до конца Спасибо за исправление ошибок "Каждый может ошибиться", - сказал ежик, слезая с кактуса. Ссылка на сообщение Поделиться на другие сайты Поделиться
Annagirl Опубликовано 26 мая, 2008 Поделиться #52 Опубликовано 26 мая, 2008 Всем доброго времени суток! И я застряла. Даже не застряла, а запрограммировала совершенно не то, что хотела построить... А построить хотела клин к панамке из выше приведенного мною файла.Const Pi = 3.1415Sub klin()' Меркиp = 50 ' обхват головыn = 4 ' количество клиньев' Точки построенияDim A(0 To 2) As DoubleDim A1(0 To 2) As DoubleDim A2(0 To 2) As DoubleDim B(0 To 2) As DoubleDim B1(0 To 2) As DoubleDim B2(0 To 2) As DoubleDim B3(0 To 2) As DoubleDim B4(0 To 2) As DoubleDim C1(0 To 2) As DoubleDim C2(0 To 2) As DoubleDim C3(0 To 2) As DoubleDim C4(0 To 2) As Double' ПостроениеA(0) = 0: A(1) = 0: A(2) = 0B(0) = A(0): B(1) = A(1) + p / 4 = 2: B(2) = 0Set lineobj = ThisDrawing.ModelSpace.AddLine(A, B)A1(0) = A(0) - (p / n / 2 + 0.5): A1(1) = A(1): A1(2) = 0A2(0) = A(0) + (p / n / 2 + 0.5): A2(1) = A(1): A2(2) = 0Set lineobj = ThisDrawing.ModelSpace.AddLine(A, A1)Set lineobj = ThisDrawing.ModelSpace.AddLine(A, A2)Set lineobj = ThisDrawing.ModelSpace.AddLine(A1, B)Set lineobj = ThisDrawing.ModelSpace.AddLine(A2, B)C1(0) = (A1(0) + B(0)) / 3: C1(1) = (A1(1) + B(1)) / 3: C1(2) = 0C2(0) = (A2(0) + B(0)) / 3: C2(1) = (A2(1) + B(1)) / 3: C2(2) = 0Call rotate_beta(C1(0), C1(1), B(0), B(1), Pi / 2, 2, x, y)B1(0) = x: B1(1) = y: B1(2) = 0Call rotate_beta(C2(0), C2(1), B(0), B(1), -Pi / 2, 2, x, y)B2(0) = x: B2(1) = y: B2(2) = 0Set lineobj = ThisDrawing.ModelSpace.AddLine(B1, C1)Set lineobj = ThisDrawing.ModelSpace.AddLine(B2, C2)C3(0) = (B(0) + A1(0)) / 3: C3(1) = (B(1) + A1(1)) / 3: C3(2) = 0C4(0) = (B(0) + A2(0)) / 3: C4(1) = (B(1) + A2(1)) / 3: C4(2) = 0Call rotate_beta(C3(0), C3(1), B(0), B(1), Pi / 2, 2, x, y)B3(0) = x: B3(1) = y: B3(2) = 0Call rotate_beta(C4(0), C4(1), B(0), B(1), -Pi / 2, 2, x, y)B4(0) = x: B4(1) = y: B4(2) = 0Set lineobj = ThisDrawing.ModelSpace.AddLine(B3, C3)Set lineobj = ThisDrawing.ModelSpace.AddLine(B4, C4)Set splineobj = Spline_4(B(0), B(1), B2(0), B2(1), B4(0), B4(1), A1(0), A1(1), 0, 0, 0, 0)Set splineobj = Spline_4(B(0), B(1), B1(0), B1(1), B(0), B3(1), A2(0), A2(1), 0, 0, 0, 0)End SubSub rotate_beta(x1, y1, x2, y2, beta, LL, x, y)dx = x2Spline_3 - x1dy = y2 - y1l = LL / Sqr(dx ^ 2 + dy ^ 2)x = x1 + l * (dx * Cos(beta) - dy * Sin(beta))y = y1 + l * (dx * Sin(beta) + dy * Cos(beta))End SubFunction Spline_4(x1, y1, x2, y2, x3, y3, x4, y4, tn_x1, tn_y1, tn_x2, tn_y2) As AcadSplineDim startTan(0 To 2) As DoubleDim endTan(0 To 2) As DoubleDim fitPoints(0 To 11) As Double startTan(0) = tn_x1: startTan(1) = tn_y1: startTan(2) = 0 endTan(0) = tn_x2: endTan(1) = tn_y2: endTan(2) = 0 fitPoints(0) = x1: fitPoints(1) = y1: fitPoints(2) = 0 fitPoints(3) = x2: fitPoints(4) = y2: fitPoints(5) = 0 fitPoints(6) = x3: fitPoints(7) = y3: fitPoints(8) = 0 fitPoints(9) = x4: fitPoints(10) = y4: fitPoints(11) = 0 Set Spline_4 = ThisDrawing.ModelSpace.AddSpline(fitPoints, startTan, endTan) Spline_4.ElevateOrder (26) Spline_4.UpdateEnd Function Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 26 мая, 2008 Автор Поделиться #53 Опубликовано 26 мая, 2008 (изменено) Исправила мелкие ошибки. И очень довольна Вашими результатами.Рисунок того, что мы строим.Const Pi = 3.1415Sub klin()' Меркиp = 50 ' обхват головыn = 4 ' количество клиньев' Точки построенияDim A(0 To 2) As DoubleDim A1(0 To 2) As DoubleDim A2(0 To 2) As DoubleDim B(0 To 2) As DoubleDim B1(0 To 2) As DoubleDim B2(0 To 2) As DoubleDim B3(0 To 2) As DoubleDim B4(0 To 2) As DoubleDim C1(0 To 2) As DoubleDim C2(0 To 2) As DoubleDim C3(0 To 2) As DoubleDim C4(0 To 2) As Double' ПостроениеA(0) = 0: A(1) = 0: A(2) = 0B(0) = A(0): B(1) = A(1) + p / 4 + 2: B(2) = 0Set lineobj = ThisDrawing.ModelSpace.AddLine(A, B)A1(0) = A(0) - (p / n / 2 + 0.5): A1(1) = A(1): A1(2) = 0A2(0) = A(0) + (p / n / 2 + 0.5): A2(1) = A(1): A2(2) = 0Set lineobj = ThisDrawing.ModelSpace.AddLine(A, A1)Set lineobj = ThisDrawing.ModelSpace.AddLine(A, A2)Set lineobj = ThisDrawing.ModelSpace.AddLine(A1, B)Set lineobj = ThisDrawing.ModelSpace.AddLine(A2, B)C1(0) = (A1(0) + 2 * B(0)) / 3: C1(1) = (A1(1) + 2 * B(1)) / 3: C1(2) = 0C2(0) = (A2(0) + 2 * B(0)) / 3: C2(1) = (A2(1) + 2 * B(1)) / 3: C2(2) = 0Call rotate_beta(C1(0), C1(1), B(0), B(1), Pi / 2, 2, x, y)B1(0) = x: B1(1) = y: B1(2) = 0Call rotate_beta(C2(0), C2(1), B(0), B(1), -Pi / 2, 2, x, y)B2(0) = x: B2(1) = y: B2(2) = 0Set lineobj = ThisDrawing.ModelSpace.AddLine(B1, C1)Set lineobj = ThisDrawing.ModelSpace.AddLine(B2, C2)C3(0) = (B(0) + 2 * A1(0)) / 3: C3(1) = (B(1) + 2 * A1(1)) / 3: C3(2) = 0C4(0) = (B(0) + 2 * A2(0)) / 3: C4(1) = (B(1) + 2 * A2(1)) / 3: C4(2) = 0Call rotate_beta(C3(0), C3(1), B(0), B(1), Pi / 2, 1.5, x, y)B3(0) = x: B3(1) = y: B3(2) = 0Call rotate_beta(C4(0), C4(1), B(0), B(1), -Pi / 2, 1.5, x, y)B4(0) = x: B4(1) = y: B4(2) = 0Set lineobj = ThisDrawing.ModelSpace.AddLine(B3, C3)Set lineobj = ThisDrawing.ModelSpace.AddLine(B4, C4)Set splineobj = Spline_4(B(0), B(1), B2(0), B2(1), B4(0), B4(1), A2(0), A2(1), 0, 0, 0, 0)Set splineobj = Spline_4(B(0), B(1), B1(0), B1(1), B3(0), B3(1), A1(0), A1(1), 0, 0, 0, 0)End SubSub rotate_beta(x1, y1, x2, y2, beta, LL, x, y)dx = x2 - x1dy = y2 - y1l = LL / Sqr(dx ^ 2 + dy ^ 2)x = x1 + l * (dx * Cos(beta) - dy * Sin(beta))y = y1 + l * (dx * Sin(beta) + dy * Cos(beta))End SubFunction Spline_4(x1, y1, x2, y2, x3, y3, x4, y4, tn_x1, tn_y1, tn_x2, tn_y2) As AcadSplineDim startTan(0 To 2) As DoubleDim endTan(0 To 2) As DoubleDim fitPoints(0 To 11) As DoublestartTan(0) = tn_x1: startTan(1) = tn_y1: startTan(2) = 0endTan(0) = tn_x2: endTan(1) = tn_y2: endTan(2) = 0fitPoints(0) = x1: fitPoints(1) = y1: fitPoints(2) = 0fitPoints(3) = x2: fitPoints(4) = y2: fitPoints(5) = 0fitPoints(6) = x3: fitPoints(7) = y3: fitPoints(8) = 0fitPoints(9) = x4: fitPoints(10) = y4: fitPoints(11) = 0Set Spline_4 = ThisDrawing.ModelSpace.AddSpline(fitPoints, startTan, endTan)Spline_4.ElevateOrder (26)Spline_4.UpdateEnd Function Изменено 26 мая, 2008 пользователем Добрушанка Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 26 мая, 2008 Автор Поделиться #54 Опубликовано 26 мая, 2008 Покажу как вычислить координаты точки, делящей отрезок в заданном соотношении.Мы знаем координаты точек A и B. Нужно вычислить координаты точки C, если известно, что AC:CB=m:n. C(0) = (n*A(0) + m*B(0)) / (m+n): C(1) = (n*A(1) + m*B(1)) / (m+n): C(2) = 0Для случая, когда AC:CB=2:1, координаты точки C будут иметь такой видC(0) = (A(0) + 2*B(0)) / 3: C(1) = (A(1) + 2*B(1)) / 3: C(2) = 0 Ссылка на сообщение Поделиться на другие сайты Поделиться
Цветы Опубликовано 26 мая, 2008 Поделиться #55 Опубликовано 26 мая, 2008 Как построить отрезок который проходит через угол начальных координат 45 градусовНапример AB =40 а BC=35 и начальная точка построения будет B(0) и из этой точки надо провести отрезок делящий этот угол пополам Короче иначе биссектриса угла или угол составляющий 45 градусов И если он противоположный то составляет 135 "Каждый может ошибиться", - сказал ежик, слезая с кактуса. Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 26 мая, 2008 Автор Поделиться #56 Опубликовано 26 мая, 2008 Нужно построить BD, я правильно поняла? А какая длина у этого отрезка? Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 26 мая, 2008 Автор Поделиться #57 Опубликовано 26 мая, 2008 (изменено) Изображенный выше рисунок на VB. Длина отрезка BD=dd=15.Const Pi = 3.1415Sub ugl()aa = 40cc = 35dd = 15Dim A(0 To 2) As DoubleDim B(0 To 2) As DoubleDim C(0 To 2) As DoubleDim D(0 To 2) As DoubleB(0) = 0: B(1) = 0: B(2) = 0A(0) = B(0): A(1) = B(1) + aa: A(2) = 0C(0) = B(0) + cc: C(1) = B(1): C(2) = 0Set lineobj = ThisDrawing.ModelSpace.AddLine(A, B)Set lineobj = ThisDrawing.ModelSpace.AddLine(C, B)Call rotate_beta(B(0), B(1), C(0), C(1), Pi / 4, dd, x, y)D(0) = x: D(1) = y: D(2) = 0Set lineobj = ThisDrawing.ModelSpace.AddLine(D, B)ZoomAllEnd SubSub rotate_beta(x1, y1, x2, y2, beta, LL, x, y)dx = x2 - x1dy = y2 - y1l = LL / Sqr(dx ^ 2 + dy ^ 2)x = x1 + l * (dx * Cos(beta) - dy * Sin(beta))y = y1 + l * (dx * Sin(beta) + dy * Cos(beta))End Sub Изменено 26 мая, 2008 пользователем Добрушанка Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 26 мая, 2008 Автор Поделиться #58 Опубликовано 26 мая, 2008 (изменено) Если рассматривать задачу нахождения биссектрисы угла в общем случае, то для этого нам нужно вычислить угол между двумя отрезками BA и BC.Чтобы вычислить этот угол, воспользуемся функцией ugol_beta(x1, y1, xc, yc, x2, y2), где (xc,yc) - это вершина угла, (x1,y1) и (x2,y2) - координаты концов отрезков, образующих угол.Const Pi = 3.1415Sub ugol()Dim A(0 To 2) As DoubleDim B(0 To 2) As DoubleDim C(0 To 2) As DoubleDim D(0 To 2) As DoubleB(0) = 0: B(1) = 0: B(2) = 0A(0) = B(0) + 10: A(1) = B(1) + 15: A(2) = 0C(0) = B(0) + 20: C(1) = B(1): C(2) = 0Set lineobj = ThisDrawing.ModelSpace.AddLine(A, B)Set lineobj = ThisDrawing.ModelSpace.AddLine(C, B)' Вычисляем угол betabeta = ugol_beta(A(0), A(1), B(0), B(1), C(0), C(1)) 'Делаем поворот на угол beta/2Call rotate_beta(B(0), B(1), C(0), C(1), beta / 2, 20, x, y) D(0) = x: D(1) = y: D(2) = 0Set lineobj = ThisDrawing.ModelSpace.AddLine(D, B)ZoomAllEnd SubSub rotate_beta(x1, y1, x2, y2, beta, LL, x, y)dx = x2 - x1dy = y2 - y1l = LL / Sqr(dx ^ 2 + dy ^ 2)x = x1 + l * (dx * Cos(beta) - dy * Sin(beta))y = y1 + l * (dx * Sin(beta) + dy * Cos(beta))End Sub'Вычисление угла (x1,y1)-(xc,yc)-(x2,y2) между отрезками (x1,y1)-(xc,yc) и (x2,y2)-(xc,yc)Function ugol_beta(x1, y1, xc, yc, x2, y2) Cos_beta = ((x1 - xc) * (x2 - xc) + (y1 - yc) * (y2 - yc)) / Sqr(((x1 - xc) ^ 2 + (y1 - yc) ^ 2) * ((x2 - xc) ^ 2 + (y2 - yc) ^ 2)) Sin_beta = Sqr(1 - Cos_beta ^ 2) If Cos_beta <> 0 Then ugol_beta = Atn(Sin_beta / Cos_beta) Else ugol_beta = Pi / 2 End IfEnd Function Изменено 26 мая, 2008 пользователем Добрушанка Ссылка на сообщение Поделиться на другие сайты Поделиться
Annagirl Опубликовано 26 мая, 2008 Поделиться #59 Опубликовано 26 мая, 2008 Очень интересно! Спасибо Вам, Добрушанка, большое!!!Вот еще возник вопросец. http://img144.imageshack.us/img144/8829/67978657ha2.jpgКак построить к панамке такое поле-клеш? L (на рисунке) = 1/2 Ог (обхват головы)OA=OA1=R (радиус) = L/Pi/2 (вспоминая геометрию...), где Pi/2 - угол 90 градусовAB-ширина поля Ссылка на сообщение Поделиться на другие сайты Поделиться
Цветы Опубликовано 26 мая, 2008 Поделиться #60 Опубликовано 26 мая, 2008 Контрольная работа Закрепление материала Выточки заднюю и переднюю не стала дорабаьывать ubka_0.zip "Каждый может ошибиться", - сказал ежик, слезая с кактуса. Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 26 мая, 2008 Автор Поделиться #61 Опубликовано 26 мая, 2008 L (на рисунке) = 1/2 Ог (обхват головы)OA=OA1=R (радиус) = L/Pi/2 (вспоминая геометрию...), где Pi/2 - угол 90 градусовAB-ширина поляМне кажется, что L = 1/4 Ог, т.к. мы строим четвертинку. И еще, нужна и вторая ширина поля A1B1. В VB нужно писать так R=L/(Pi/2 ), а то L/Pi/2 - это то же самое, что L/(2*P).Сам код программы Const Pi = 3.1415Sub klesh() OG = 50 Spol1 = 5 'Ширина поля AB Spol2 = 3 ' Ширина поля A1B1 Dim A(0 To 2) As Double Dim B(0 To 2) As Double Dim C(0 To 2) As Double Dim O(0 To 2) As Double Dim A1(0 To 2) As Double Dim B1(0 To 2) As Double L = OG / 4 R = L / (Pi / 2) O(0) = 0: O(1) = 0: O(2) = 0 A1(0) = O(0): A1(1) = O(1) - R: A1(2) = 0 B1(0) = A1(0): B1(1) = A1(1) - Spol2: B1(2) = 0 A(0) = O(0) + R: A(1) = O(1): A(2) = 0 B(0) = A(0) + Spol1: B(1) = A(1): B(2) = 0 Set lineobj = ThisDrawing.ModelSpace.AddLine(O, A) Set lineobj = ThisDrawing.ModelSpace.AddLine(O, A1) Set lineobj = ThisDrawing.ModelSpace.AddLine(B, A) Set lineobj = ThisDrawing.ModelSpace.AddLine(B1, A1) Set arcObj = ThisDrawing.ModelSpace.AddArc(O, R, 3 * Pi / 2, 2 * Pi) k = R + (Spol2 + Spol1) / 2 Call rotate_beta(O(0), O(1), A1(0), A1(1), Pi / 4, k, x, y) C(0) = x: C(1) = y: C(2) = 0 Set SplineObj = Spline_3(B1(0), B1(1), C(0), C(1), B(0), B(1), 1, 0, 0, 1) ZoomAllEnd SubFunction Spline_3(x1, y1, x2, y2, x3, y3, tn_x1, tn_y1, tn_x2, tn_y2) As AcadSplineDim startTan(0 To 2) As DoubleDim endTan(0 To 2) As DoubleDim fitPoints(0 To 8) As Double startTan(0) = tn_x1: startTan(1) = tn_y1: startTan(2) = 0 endTan(0) = tn_x2: endTan(1) = tn_y2: endTan(2) = 0 fitPoints(0) = x1: fitPoints(1) = y1: fitPoints(2) = 0 fitPoints(3) = x2: fitPoints(4) = y2: fitPoints(5) = 0 fitPoints(6) = x3: fitPoints(7) = y3: fitPoints(8) = 0 Set Spline_3 = ThisDrawing.ModelSpace.AddSpline(fitPoints, startTan, endTan) Spline_3.ElevateOrder (26) Spline_3.UpdateEnd FunctionSub rotate_beta(x1, y1, x2, y2, beta, LL, x, y)dx = x2 - x1dy = y2 - y1l = LL / Sqr(dx ^ 2 + dy ^ 2)x = x1 + l * (dx * Cos(beta) - dy * Sin(beta))y = y1 + l * (dx * Sin(beta) + dy * Cos(beta))End Sub Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 26 мая, 2008 Автор Поделиться #62 Опубликовано 26 мая, 2008 Контрольная работа Закрепление материалаОчень красиво получилось. Мне понравилось. Молодец! Ссылка на сообщение Поделиться на другие сайты Поделиться
Annagirl Опубликовано 26 мая, 2008 Поделиться #63 Опубликовано 26 мая, 2008 (изменено) Мне кажется, что L = 1/4 Ог, т.к. мы строим четвертинку.Нет. Все же это половинка. Строится так, чтобы в итоге получилась форма трапеции, а не ровного круга. A1B1 можно сделать равным AB. Или на 1см меньше...http://img514.imageshack.us/img514/3778/34140285tt6.jpg Изменено 26 мая, 2008 пользователем Annagirl Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 26 мая, 2008 Автор Поделиться #64 Опубликовано 26 мая, 2008 (изменено) Тогда в коде программы нужно подправить вместо L = OG / 4 на L = OG / 2.Получилось у Вас запрограммировать Вашу панамку? На какой возраст ребенка Вы будете ее шить? Изменено 26 мая, 2008 пользователем Добрушанка Ссылка на сообщение Поделиться на другие сайты Поделиться
Annagirl Опубликовано 26 мая, 2008 Поделиться #65 Опубликовано 26 мая, 2008 У меня их двое: полтора и три года )Панамки просто строятся, может на бумаге оно даже и легче, но очень хочется научиться строить именно в VB. Кстати, в ажиотаже взялась за детские брючки, но ничего не выходит... Надо еще поразбираться в кодах и подпрограммах, но суть все более проясняется! Спасибо! Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 26 мая, 2008 Автор Поделиться #66 Опубликовано 26 мая, 2008 А по какой методике Вы строите детские брючки? Я почему спрашиваю, у самой карапуз 1.3 года, на лето хотела сшить шортики и брючки, так что можем вместе заняться построением. Ссылка на сообщение Поделиться на другие сайты Поделиться
Цветы Опубликовано 26 мая, 2008 Поделиться #67 Опубликовано 26 мая, 2008 Уже можно пробывать построения платья или брюк Этих знаний достаточно и подпрограмм "Каждый может ошибиться", - сказал ежик, слезая с кактуса. Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 26 мая, 2008 Автор Поделиться #68 Опубликовано 26 мая, 2008 Да, достаточно, можно пробовать. Если появятся вопросы по каким-то узлам построения, то будем их решать. Ссылка на сообщение Поделиться на другие сайты Поделиться
Annagirl Опубликовано 27 мая, 2008 Поделиться #69 Опубликовано 27 мая, 2008 Методику построения детских брючек на мальчика особо выбирать не приходится, так как в моем арсенале лишь одна книга, содержащая информацию по построению детской одежды: Костина Е.Я. Раскрой и пошив одежды. (аж 1977 года!!!)http://img179.imageshack.us/img179/3776/p5270014tp3.jpgМерки:Р=104 (рост)Ст = 28Сб = 32Дтк (длина от талии до колена)=34Вс = 20Ок = 26Осп = 24 (Обхват стопы через пятку!)Ди = 60Пб = 2 – 4Пт = 0,5 – 1 Для удобства чертеж передней и задней части выполняют отдельно. Построение чертежа передней половинки.В верхнем левом углу листа бумаги ставят т. О и проводят через нее вправо и вниз горизонтальную и вертикальную прямые линии. ОЯ = В + 1ОБ=0,1Р+2 ОТ = 0,5 Сб + 1От т. Б вправо отложить линию до пересечения с линией, прочерченной от т.Т строго вниз, поставить т. Б1Я1 – точка пересечения вертикальной линии, прочерченной от т.Т строго вниз, и горизонтальной линии, прочерченной от т. Я вправоЯ1Я2 = 0,1СбПо биссектрисе угла ТЯ1Я2 откладывают 2 см и проводят плавную вогнутую линиюРасстояние между тт.Я и Я2 делят пополам и через точку деления проводят вертикальную линию до линии талии и ставят т. Т1, от которой откладывают длину брюк:Т1Н = ДиТ1К=ДткНН1=НН2= Осп/4ТТ2=0,5Ст+ПтРасстояние от т.О до т.Б делят на три равные части. Т.Т2 соединяют с нижней точкой деления плавной выпуклой линиейКК1=КК2=Ок/4+1Точки Н1, К2 и Я, а также точки Н2, К1 и я2 соединить.НН3=1Оформить линию низа. Ссылка на сообщение Поделиться на другие сайты Поделиться
Annagirl Опубликовано 27 мая, 2008 Поделиться #70 Опубликовано 27 мая, 2008 Вот мой труд! Только вопрос по точке D: она должна проходить по линии OB /3 (по нижней точке, а судя по чертежу, она проходит по верхней).Const Pi = 3.1415Sub Brukimalcik() 'МеркиP = 104 'РостCt = 24 'Полуобхват талииCb = 25.5 'Полуобхват бедерDtk = 28 'Длина от талии до коленной чашечкиOk = 22 ' Обхват коленаBc = 17 'Высота сиденияBcn = 24 'Высота спинки до плеча, высота плеча косаяDi = 50 'Длина изделияPb = 3 ' Прибавка по бедрамPt = 1 'Прибавка по талии 'Описание всех точекDim O(0 To 2) As DoubleDim T(0 To 2) As DoubleDim T1(0 To 2) As DoubleDim T2(0 To 2) As DoubleDim B(0 To 2) As DoubleDim B1(0 To 2) As DoubleDim D(0 To 2) As DoubleDim R(0 To 2) As DoubleDim R1(0 To 2) As DoubleDim R2(0 To 2) As DoubleDim R3(0 To 2) As DoubleDim R4(0 To 2) As DoubleDim K(0 To 2) As DoubleDim K1(0 To 2) As DoubleDim K2(0 To 2) As DoubleDim H(0 To 2) As DoubleDim H1(0 To 2) As DoubleDim H2(0 To 2) As DoubleDim H3(0 To 2) As Double Dim LineObj As AcadLine 'Построение точекO(0) = 0: O(1) = 0: O(2) = 0R(0) = O(0): R(1) = O(1) - (Bc + 1): R(2) = 0T(0) = O(0) + (Cb / 2 + 1) + 1: T(1) = O(1): T(2) = 0T2(0) = T(0) - (Ct / 2 + Pt): T2(1) = T(1): T2(2) = 0R1(0) = T(0): R1(1) = R(1): R1(2) = 0R2(0) = R1(0) + (Cb / 10): R2(1) = R1(1): R2(2) = 0B(0) = O(0): B(1) = O(1) - P / 10: B(2) = 0B1(0) = T(0): B1(1) = B(1): B1(2) = 0D(0) = O(0): D(1) = (B(1) + O(1)) / 3: D(2) = 0Call rotate_beta(R1(0), R1(1), R2(0), R2(1), Pi / 4, 2, x, y)R3(0) = x: R3(1) = y: R3(2) = 0R4(0) = (R(0) + R2(0)) / 2: R4(1) = R(1): R4(2) = 0T1(0) = R4(0): T1(1) = T(1): T1(2) = 0H(0) = T1(0): H(1) = T1(1) - Di: H(2) = 0'Линия низаH1(0) = H(0) - (Bcn / 4 + 1): H1(1) = H(1): H1(2) = 0H2(0) = H(0) + (Bcn / 4 + 1): H2(1) = H(1): H2(2) = 0H3(0) = H(0): H3(1) = H(1) + 1: H3(2) = 0' линия коленK(0) = T1(0): K(1) = T1(1) - Dtk: K(2) = 0K1(0) = K(0) - (Ok / 4): K1(1) = K(1): K1(2) = 0K2(0) = K(0) + (Ok / 4): K2(1) = K(1): K2(2) = 0'построение линийSet LineObj = ThisDrawing.ModelSpace.AddLine(O, R)Set LineObj = ThisDrawing.ModelSpace.AddLine(O, T)Set LineObj = ThisDrawing.ModelSpace.AddLine(T, R1)Set LineObj = ThisDrawing.ModelSpace.AddLine(R1, R2)Set LineObj = ThisDrawing.ModelSpace.AddLine(R2, R)Set LineObj = ThisDrawing.ModelSpace.AddLine(B, B1)Set LineObj = ThisDrawing.ModelSpace.AddLine(R1, R3)Set LineObj = ThisDrawing.ModelSpace.AddLine(T1, H)Set LineObj = ThisDrawing.ModelSpace.AddLine(H1, K1)Set LineObj = ThisDrawing.ModelSpace.AddLine(K1, R)Set LineObj = ThisDrawing.ModelSpace.AddLine(R2, K2)Set LineObj = ThisDrawing.ModelSpace.AddLine(K2, H2)Set LineObj = ThisDrawing.ModelSpace.AddLine(H1, H3)Set LineObj = ThisDrawing.ModelSpace.AddLine(H3, H2)Set LineObj = ThisDrawing.ModelSpace.AddLine(K1, K2)'СплайнSet Splineobj = Spline_3(B1(0), B1(1), R3(0), R3(1), R2(0), R2(1), 0, 0, 0, 0)Set Splineobj = Spline_2(T2(0), T2(1), D(0), D(1), 0, 0, 0, 0) End SubSub rotate_beta(x1, y1, x2, y2, beta, LL, x, y)dx = x2 - x1dy = y2 - y1l = LL / Sqr(dx ^ 2 + dy ^ 2)x = x1 + l * (dx * Cos(beta) - dy * Sin(beta))y = y1 + l * (dx * Sin(beta) + dy * Cos(beta))End SubFunction Spline_3(x1, y1, x2, y2, x3, y3, tn_x1, tn_y1, tn_x2, tn_y2) As AcadSplineDim startTan(0 To 2) As DoubleDim endTan(0 To 2) As DoubleDim fitPoints(0 To 8) As Double startTan(0) = tn_x1: startTan(1) = tn_y1: startTan(2) = 0 endTan(0) = tn_x2: endTan(1) = tn_y2: endTan(2) = 0 fitPoints(0) = x1: fitPoints(1) = y1: fitPoints(2) = 0 fitPoints(3) = x2: fitPoints(4) = y2: fitPoints(5) = 0 fitPoints(6) = x3: fitPoints(7) = y3: fitPoints(8) = 0 Set Spline_3 = ThisDrawing.ModelSpace.AddSpline(fitPoints, startTan, endTan) Spline_3.ElevateOrder (26) Spline_3.UpdateEnd FunctionFunction Spline_2(x1, y1, x2, y2, tn_x1, tn_y1, tn_x2, tn_y2) As AcadSplineDim startTan(0 To 2) As DoubleDim endTan(0 To 2) As DoubleDim fitPoints(0 To 5) As Double startTan(0) = tn_x1: startTan(1) = tn_y1: startTan(2) = 0 endTan(0) = tn_x2: endTan(1) = tn_y2: endTan(2) = 0 fitPoints(0) = x1: fitPoints(1) = y1: fitPoints(2) = 0 fitPoints(3) = x2: fitPoints(4) = y2: fitPoints(5) = 0 Set Spline_2 = ThisDrawing.ModelSpace.AddSpline(fitPoints, startTan, endTan) Spline_2.ElevateOrder (26) Spline_2.UpdateEnd Function Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 27 мая, 2008 Автор Поделиться #71 Опубликовано 27 мая, 2008 Вот мой труд! Только вопрос по точке D: она должна проходить по линии OB /3 (по нижней точке, а судя по чертежу, она проходит по верхней).Отрезок OB делится точкой D в отношении 2:1 от точки О, поэтому координаты точки D имеют видD(0) = O(0): D(1) = (2 * B(1) + O(1)) / 3: D(2) = 0Крайние точки можно соединить и сплайнами:beta = ugol_beta(K2(0), K2(1), H2(0), H2(1), H2(0) + 1, H2(1))Set Splineobj = Spline_2(R2(0), R2(1), K2(0), K2(1), 0, 0, Cos(beta), Sin(beta))beta = ugol_beta(R(0), R(1), K1(0), K1(1), K1(0) + 1, K1(1))Set Splineobj = Spline_5(T2(0), T2(1), D(0), D(1), B(0), B(1), R(0), R(1), K1(0), K1(1), 0, 0, Cos(beta), Sin(beta))Долго Вы писали программу? Хорошо все получилось. Молодец! Ссылка на сообщение Поделиться на другие сайты Поделиться
Цветы Опубликовано 27 мая, 2008 Поделиться #72 Опубликовано 27 мая, 2008 ДобрушанкаА вы потом научите еще составлять форму для мерок, чтобы можно было менять значение мерок не заходя в VB как у вас "Каждый может ошибиться", - сказал ежик, слезая с кактуса. Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 27 мая, 2008 Автор Поделиться #73 Опубликовано 27 мая, 2008 Научу, конечно. Но самое главное - это научиться программировать произвольное построение в VB. A форма используется для того, чтобы "не знающий" пользователь случайно не изменил программу. На разработку и обслуживание интерфейса (формы) уходит достаточно много времени, но само построение, которое осуществляет программа, лучше не становится. Ссылка на сообщение Поделиться на другие сайты Поделиться
Annagirl Опубликовано 28 мая, 2008 Поделиться #74 Опубликовано 28 мая, 2008 Долго Вы писали программу? Хорошо все получилось. Молодец! Спасибо! Писала не очень долго, т.к. быстро поняла суть отображения координат. Дольше исправляла ошибки... beta = ugol_beta(K2(0), K2(1), H2(0), H2(1), H2(0) + 1, H2(1))Set Splineobj = Spline_2(R2(0), R2(1), K2(0), K2(1), 0, 0, Cos(beta), Sin(beta))beta = ugol_beta(R(0), R(1), K1(0), K1(1), K1(0) + 1, K1(1))Set Splineobj = Spline_5(T2(0), T2(1), D(0), D(1), B(0), B(1), R(0), R(1), K1(0), K1(1), 0, 0, Cos(beta), Sin(beta)) А что это означает?и как программируется сплайн по 5 точкам? Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 28 мая, 2008 Автор Поделиться #75 Опубликовано 28 мая, 2008 Функция для построения пятиточечного сплайнаFunction Spline_5(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, tn_x1, tn_y1, tn_x2, tn_y2) As AcadSplineDim startTan(0 To 2) As DoubleDim endTan(0 To 2) As DoubleDim fitPoints(0 To 14) As DoublestartTan(0) = tn_x1: startTan(1) = tn_y1: startTan(2) = 0endTan(0) = tn_x2: endTan(1) = tn_y2: endTan(2) = 0fitPoints(0) = x1: fitPoints(1) = y1: fitPoints(2) = 0fitPoints(3) = x2: fitPoints(4) = y2: fitPoints(5) = 0fitPoints(6) = x3: fitPoints(7) = y3: fitPoints(8) = 0fitPoints(9) = x4: fitPoints(10) = y4: fitPoints(11) = 0fitPoints(12) = x5: fitPoints(13) = y5: fitPoints(14) = 0Set Spline_5 = ThisDrawing.ModelSpace.AddSpline(fitPoints, startTan, endTan)Spline_5.ElevateOrder (26)Spline_5.UpdateEnd Function Ссылка на сообщение Поделиться на другие сайты Поделиться
Рекомендуемые сообщения