################################### # Hausuebung 03 # # Spamer_Max Benjamin # # 12033091 # ################################### import rhinoscriptsyntax as rs import random, time, sys ### sys.path.append("P:/") ### add path where "DM_lib.py" can be found !!! #sys.path.append("P:/DM2/") ### add path where "DM_lib.py" can be found !!! sys.path.append("/Users/mbns/Desktop")### add path where "DM_lib.py" can be found !!! import DM_lib as dm ### reload(dm) ################################## # Sphere definition dm.PointRadius(displayModeX=0, rad=2, styl=3, verbose=0) rs.EnableRedraw (0) dm.eA() def DrawPointSphere(rad, anz, center=[0, 0, 0]): vecS= [] deltaAngle = 360 / anz for i in range(anz): vec = [rad, 0, 0] vecX = rs.VectorRotate(vec, deltaAngle * i, dm.pntRandCoords(-1, 1)[0]) vecX = rs.VectorAdd(vecX, center) vecS.append(vecX) return vecS # Cube definition def DrawCube(rad, rotate=0): vecC = [] center = [0, 0, 0] vecC.append(rs.VectorAdd(center, rs.VectorScale([rad, rad, -rad], 1))) # Vector A vecC.append(rs.VectorAdd(center, rs.VectorScale([-rad, rad, -rad], 1))) # Vector B vecC.append(rs.VectorAdd(center, rs.VectorScale([rad, -rad, -rad], 1))) # Vector C vecC.append(rs.VectorAdd(center, rs.VectorScale([-rad, -rad, -rad], 1))) # Vector D vecC.append(rs.VectorAdd(center, rs.VectorScale([rad, rad, rad], 1))) # Vector E vecC.append(rs.VectorAdd(center, rs.VectorScale([-rad, rad, rad], 1))) # Vector F vecC.append(rs.VectorAdd(center, rs.VectorScale([rad, -rad, rad], 1))) # Vector G vecC.append(rs.VectorAdd(center, rs.VectorScale([-rad, -rad, rad], 1))) # Vector H if rotate: randvec = dm.pntRandCoords(-1, 1)[0] for i, vec in enumerate(vecC): vecC[i] = rs.VectorRotate(vec, 30.0, randvec) baseCrv = rs.AddCurve([vecC[0], vecC[1], vecC[3], vecC[2], vecC[0]], 1) topCrv = rs.AddCurve([vecC[4], vecC[5], vecC[7], vecC[6], vecC[4]], 1) rightCrv = rs.AddCurve([vecC[0], vecC[4], vecC[6], vecC[2], vecC[0]], 1) leftCrv = rs.AddCurve([vecC[1], vecC[5], vecC[7], vecC[3], vecC[1]], 1) return vecC # enclosing sphere def CalculateEnclosingSphereRadius(edge_len): #return (edge_len/2) return (3 * (edge_len ** 2)) ** 0.5 / 2 # Draw enclosing sphere if 1: rs.DeleteObjects(rs.ObjectsByType(1)) anz = 3001 rad = 10 edge_len = 7 # Sphere points for inner sphere sphVecS = DrawPointSphere(rad, anz) pnts = rs.AddPoints(sphVecS) # Draw cube around the origin vecC = DrawCube(edge_len, rotate=0) # Draw outer enclosing sphere enclosing_sphere_radius = CalculateEnclosingSphereRadius(edge_len) outer_sphere_points = DrawPointSphere(enclosing_sphere_radius, anz) outer_pnts = rs.AddPoints(outer_sphere_points) # Color points to differentiate for i, cor in enumerate(sphVecS): if abs(cor[0]) < edge_len and abs(cor[1]) < edge_len and abs(cor[2]) < edge_len: rs.ObjectColor(pnts[i], [200, 0, 0]) else: rs.DeleteObject(pnts[i]) # Delete points outside cube # Color points of the outer sphere for pt in outer_pnts: rs.ObjectColor(pt, [0, 0, 200]) def DrawZigZag(start, end, segments=10, amplitude=1.0): # Start- und Endpunkte als einfache Listen definieren x_start, y_start, z_start = start x_end, y_end, z_end = end total_length = x_end - x_start segment_length = total_length / segments zigzag_points = [] for i in range(segments + 1): x = x_start + i * segment_length # Y-Koordinate abwechselnd verschieben y = y_start + (amplitude if i % 2 == 0 else -amplitude) # Z bleibt konstant z = z_start zigzag_points.append([x, y, z]) # Zickzack-Linie zeichnen zigzag_curve = rs.AddCurve(zigzag_points, degree=2) rs.ObjectColor(zigzag_curve, [0, 250, 0]) # Aufruf start1 = [-7, 3, 7] end1 = [7, -3, 7] DrawZigZag(start1, end1, segments=10, amplitude=3.0) start2 = [-7, -3, 7] end2 = [7, 3, 7] DrawZigZag(start2, end2, segments=10, amplitude=3.0) dm.zA()