################################### # Hausuebung 04 # # 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, center=[0, 0, 0]): vecC = [] 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, rotate, 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 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]) # enclosing sphere def CalculateEnclosingSphereRadius(edge_len): #return (edge_len/2) return (3 * (edge_len ** 2)) ** 0.5 / 2 # Draw enclosing sphere 1 if 1: rs.DeleteObjects(rs.ObjectsByType(1)) anz = 3001 rad = 10 edge_len = 7 #rotate cube rotate = 0 # Draw cube around the origin vecC = DrawCube(edge_len, rotate) # Sphere points for inner sphere sphVecS = DrawPointSphere(rad, anz) pnts = rs.AddPoints(sphVecS) # Color points to differentiate red 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], [0, 0, 0]) else: rs.DeleteObject(pnts[i]) # Delete points outside cube # Draw inner enclosing sphere enclosing_sphere_radius = CalculateEnclosingSphereRadius(edge_len) inner_sphere_points = DrawPointSphere(enclosing_sphere_radius, anz) inner_pnts = rs.AddPoints(inner_sphere_points) # Color points of the inner sphere blue for pt in inner_pnts: rs.ObjectColor(pt, [0, 0, 0]) # Kopiert Draw enclosing sphere if 2: #rs.DeleteObjects(rs.ObjectsByType(1)) anz = 3001 rad = 10 edge_len = 7 #rotate cube rotate=0 center = vecC[0] # Draw cube around the origin vecC = DrawCube(edge_len, rotate, center) # Sphere points for inner sphere sphVecS = DrawPointSphere(rad, anz, center) pnts = rs.AddPoints(sphVecS) # Color points to differentiate for i, cor in enumerate(sphVecS): if abs(cor[0]-center[0]) < edge_len and abs(cor[1]-center[1]) < edge_len and abs(cor[2]-center[2]) < edge_len: rs.ObjectColor(pnts[i], [0, 0, 0]) else: rs.DeleteObject(pnts[i]) # Delete points outside cube #rs.ObjectColor(pnts[i], [10, 0, 0]) # Draw inner enclosing sphere enclosing_sphere_radius = CalculateEnclosingSphereRadius(edge_len) inner_sphere_points = DrawPointSphere(enclosing_sphere_radius, anz, center) inner_pnts = rs.AddPoints(inner_sphere_points) # Color points of the inner sphere for pt in inner_pnts: rs.ObjectColor(pt, [0, 0, 0]) # Kopiert Draw enclosing sphere if 3: #rs.DeleteObjects(rs.ObjectsByType(1)) anz = 3001 rad = 10 edge_len = 7 #rotate cube rotate=0 center = vecC[1] # Draw cube around the origin vecC = DrawCube(edge_len, rotate, center) # Sphere points for inner sphere sphVecS = DrawPointSphere(rad, anz, center) pnts = rs.AddPoints(sphVecS) # Color points to differentiate for i, cor in enumerate(sphVecS): if abs(cor[0]-center[0]) < edge_len and abs(cor[1]-center[1]) < edge_len and abs(cor[2]-center[2]) < edge_len: rs.ObjectColor(pnts[i], [0, 0, 0]) else: rs.DeleteObject(pnts[i]) # Delete points outside cube #rs.ObjectColor(pnts[i], [10, 0, 0]) # Draw inner enclosing sphere enclosing_sphere_radius = CalculateEnclosingSphereRadius(edge_len) inner_sphere_points = DrawPointSphere(enclosing_sphere_radius, anz, center) inner_pnts = rs.AddPoints(inner_sphere_points) # Color points of the inner sphere for pt in inner_pnts: rs.ObjectColor(pt, [0, 0, 0]) # Kopiert Draw enclosing sphere if 4: #rs.DeleteObjects(rs.ObjectsByType(1)) anz = 3001 rad = 10 edge_len = 7 #rotate cube rotate=0 center = vecC[2] # Draw cube around the origin vecC = DrawCube(edge_len, rotate, center) # Sphere points for inner sphere sphVecS = DrawPointSphere(rad, anz, center) pnts = rs.AddPoints(sphVecS) # Color points to differentiate for i, cor in enumerate(sphVecS): if abs(cor[0]-center[0]) < edge_len and abs(cor[1]-center[1]) < edge_len and abs(cor[2]-center[2]) < edge_len: rs.ObjectColor(pnts[i], [0, 0, 0]) else: rs.DeleteObject(pnts[i]) # Delete points outside cube #rs.ObjectColor(pnts[i], [10, 0, 0]) # Draw inner enclosing sphere enclosing_sphere_radius = CalculateEnclosingSphereRadius(edge_len) inner_sphere_points = DrawPointSphere(enclosing_sphere_radius, anz, center) inner_pnts = rs.AddPoints(inner_sphere_points) # Color points of the inner sphere for pt in inner_pnts: rs.ObjectColor(pt, [0, 0, 0]) # Kopiert Draw enclosing sphere if 5: #rs.DeleteObjects(rs.ObjectsByType(1)) anz = 3001 rad = 10 edge_len = 7 #rotate cube rotate=0 center = vecC[3] # Draw cube around the origin vecC = DrawCube(edge_len, rotate, center) # Sphere points for inner sphere sphVecS = DrawPointSphere(rad, anz, center) pnts = rs.AddPoints(sphVecS) # Color points to differentiate for i, cor in enumerate(sphVecS): if abs(cor[0]-center[0]) < edge_len and abs(cor[1]-center[1]) < edge_len and abs(cor[2]-center[2]) < edge_len: rs.ObjectColor(pnts[i], [0, 0, 0]) else: rs.DeleteObject(pnts[i]) # Delete points outside cube #rs.ObjectColor(pnts[i], [10, 0, 0]) # Draw inner enclosing sphere enclosing_sphere_radius = CalculateEnclosingSphereRadius(edge_len) inner_sphere_points = DrawPointSphere(enclosing_sphere_radius, anz, center) inner_pnts = rs.AddPoints(inner_sphere_points) # Color points of the inner sphere for pt in inner_pnts: rs.ObjectColor(pt, [0, 0, 0]) dm.zA()