36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
import numpy as np
|
|
import vsketch
|
|
from vpype import UNITS
|
|
|
|
class Ocean(vsketch.SketchClass):
|
|
num_line = vsketch.Param(100, 1)
|
|
y_offset = vsketch.Param(19.0)
|
|
x_freq = vsketch.Param(0.25)
|
|
y_freq = vsketch.Param(18)
|
|
tilt = vsketch.Param(-45, -90, 90)
|
|
move_x = vsketch.Param(200.0, -1000, 1000)
|
|
move_y = vsketch.Param(0.0, -1000, 1000)
|
|
move_z = vsketch.Param(60.0, -1000, 1000)
|
|
|
|
def draw(self, vsk: vsketch.Vsketch) -> None:
|
|
vsk.size("a4", landscape=True)
|
|
vsk.scale("cm")
|
|
#vsk.penWidth(0.1)
|
|
x_coords = np.linspace(0, 25, 1000)
|
|
|
|
perlin = vsk.noise(
|
|
x_coords * self.x_freq, np.arange(self.num_line) / self.num_line * self.y_freq
|
|
)
|
|
|
|
for i in range(self.num_line):
|
|
y_coords = perlin[:, i] + self.y_offset / self.num_line * i
|
|
vsk.polygon(x_coords, y_coords)
|
|
|
|
vsk.vpype(f"perspective --move {self.move_x} {self.move_y} {self.move_z} --tilt {self.tilt}")
|
|
|
|
def finalize(self, vsk: vsketch.Vsketch) -> None:
|
|
vsk.vpype("linemerge linesimplify reloop linesort")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
Ocean.display() |