|
|
@@ -0,0 +1,82 @@
|
|
|
+## A language to describe a sketch
|
|
|
+
|
|
|
+## Example
|
|
|
+```yaml
|
|
|
+libraries: ["from math import tan, radians, sin, cos",
|
|
|
+ "from pysketcher import *"]
|
|
|
+fontsize: 18
|
|
|
+g: 9.81 # constant gravity
|
|
|
+theta: 30.0 # inclined plane angle
|
|
|
+L: 10.0 # sketch sizing parameter
|
|
|
+a: 1.0 #
|
|
|
+xmin: 0.0 # sketech min Abscissa
|
|
|
+ymin: -3.0 # sketech min Ordinate
|
|
|
+rl: 2.0 # rectangle width
|
|
|
+rL: 1.0 # rectangle length
|
|
|
+setframe: # sketch setup
|
|
|
+ action: "drawing_tool.set_coordinate_system(xmin=xmin-L/5, xmax=xmin+1.5*L,ymin=ymin, ymax=ymin+1.5*L,instruction_file='tmp_mpl_friction.py')"
|
|
|
+setblackline: # default frame values and actions
|
|
|
+ action: "drawing_tool.set_linecolor('black')"
|
|
|
+B: point(a+L,0) # wall right end
|
|
|
+A: point(a,tan(radians(theta))*L) # wall left end
|
|
|
+normal_vec: point(sin(radians(theta)),cos(radians(theta))) # Vector normal to wall
|
|
|
+tangent_vec: point(cos(radians(theta)),-sin(radians(theta))) # Vector tangent to wall
|
|
|
+help_line: Line(A,B) # wall line
|
|
|
+x: a + 3*L/10.
|
|
|
+y: help_line(x=x)
|
|
|
+contact: point(x, y)
|
|
|
+c: contact + rL/2*normal_vec
|
|
|
+rectangle:
|
|
|
+ formula: Rectangle(contact, rl, rL)
|
|
|
+ style:
|
|
|
+ linecolor: blue
|
|
|
+ filled_curves: blue
|
|
|
+ transform: ["rotate(-theta, contact)",
|
|
|
+ "translate(-rl/2*tangent_vec)"]
|
|
|
+N:
|
|
|
+ formula: Force(contact - rl*normal_vec, contact, r'$N$', text_pos='start')
|
|
|
+ style:
|
|
|
+ linecolor: black
|
|
|
+mg:
|
|
|
+ formula: Gravity(c, rl, text='$Mg$')
|
|
|
+ style:
|
|
|
+ linecolor: black
|
|
|
+wheel:
|
|
|
+ formula: "Composition({'outer': rectangle})"
|
|
|
+ style:
|
|
|
+ shadow: 1
|
|
|
+body:
|
|
|
+ formula: "Composition({'wheel': wheel, 'N': N, 'mg': mg})"
|
|
|
+ style:
|
|
|
+ linecolor: black
|
|
|
+mB:
|
|
|
+ formula: Text(r'$B$',B)
|
|
|
+mA:
|
|
|
+ formula: Text(r'$A$', A)
|
|
|
+wall:
|
|
|
+ formula: Wall(x=[A[0], B[0]], y=[A[1], B[1]], thickness=-0.25,transparent=False)
|
|
|
+ style:
|
|
|
+ linecolor: black
|
|
|
+angle:
|
|
|
+ formula: "Arc_wText(r'$<bslash>theta$', center=B, radius=3, start_angle=180-theta, arc_angle=theta, fontsize=fontsize)"
|
|
|
+ style:
|
|
|
+ linecolor: black
|
|
|
+ linewidth: 1
|
|
|
+ground:
|
|
|
+ formula: Line((B[0]-L/10., 0), (B[0]-L/2.,0))
|
|
|
+ stlye:
|
|
|
+ linecolor: black
|
|
|
+ linestyle: dashed
|
|
|
+ linewidth: 1
|
|
|
+x_const:
|
|
|
+ formula: Line(contact, contact + point(0,4))
|
|
|
+ style:
|
|
|
+ linestyle: dotted
|
|
|
+ transform: rotate(-theta, contact)
|
|
|
+x_axis:
|
|
|
+ formula: "Axis(start=contact+ 2*rl*normal_vec, length=2*rl,label='$x$', rotation_angle=-theta)"
|
|
|
+plan:
|
|
|
+ formula: "Composition({'body': body, 'angle': angle, 'inclined wall': wall, 'x start': x_const, 'x axis': x_axis, 'mA': mA, 'mB': mB})"
|
|
|
+friction:
|
|
|
+ formula: "Composition({'plan': plan, 'ground': ground})"
|
|
|
+```
|