Skip to content

Commit c4f7b6d

Browse files
committed
add
1 parent fb70a9b commit c4f7b6d

File tree

2 files changed

+116
-1
lines changed

2 files changed

+116
-1
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@
5252
+ **simplePID_advanced** - функция пид + ограничения
5353

5454
### processing - примеры на Processing
55-
+ **first_lesson** - [Урок #1](https://youtu.be/2fs1tuUUJRM)
55+
+ **first_lesson** - [Урок #1](https://youtu.be/2fs1tuUUJRM)
56+
+ **physics** - [Урок #2](https://youtu.be/78N0t5BxQyY)
5657

5758
### soft_pwm_lesson - программный ШИМ
5859
+ [Видос](https://youtu.be/UvxOwSfa3Zg)

processing/physics/physics.pde

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
import controlP5.*;
2+
ControlP5 cp5;
3+
4+
PVector pos, vel;
5+
int r = 25;
6+
7+
void setup() {
8+
size (640, 480);
9+
frameRate(200);
10+
pos = new PVector(width/2, height/2);
11+
vel = PVector.random2D().mult(5);
12+
13+
cp5 = new ControlP5(this);
14+
addSld("size", 5, 50, 5);
15+
addSld("grav", 0, 5, 0);
16+
addSld("speed", 5, 30, 5);
17+
addSld("damp", 0, 1, 1);
18+
addSld("drag", 0, 0.001, 0);
19+
addSld("water", 0, 0.001, 0);
20+
addSld("dense", 0, 0.001, 0);
21+
22+
cp5.addButton("reset")
23+
.setPosition(120, 10)
24+
.setSize(100, 20)
25+
;
26+
27+
cp5.addToggle("toggle")
28+
.setPosition(120, 40)
29+
.setSize(50, 20)
30+
.setMode(ControlP5.SWITCH)
31+
;
32+
}
33+
34+
void reset() {
35+
vel = PVector.random2D();
36+
pos = new PVector(width/2, height/2);
37+
vel.normalize();
38+
vel.mult(getSlider("speed"));
39+
}
40+
41+
void draw() {
42+
background(255);
43+
float r = getSlider("size");
44+
boolean waterExists = cp5.get(Toggle.class, "toggle").getState();
45+
46+
PVector acc = new PVector();
47+
acc.set(0, getSlider("grav"));
48+
49+
float dens = 0;
50+
float drag = getSlider("drag");
51+
if (waterExists && pos.y > height*2/3) {
52+
dens = getSlider("dense");
53+
drag = getSlider("water");
54+
}
55+
acc.y -= r*r*r * dens;
56+
57+
PVector accV = new PVector();
58+
accV = vel.copy();
59+
accV.normalize();
60+
accV.mult(-drag * r * r);
61+
62+
acc.add(accV);
63+
acc.y -= r*r*r * dens;
64+
65+
vel.add(acc);
66+
pos.add(vel);
67+
68+
if (pos.x < r) {
69+
vel.x = -vel.x;
70+
vel.mult(getSlider("damp"));
71+
pos.x = r;
72+
}
73+
if (pos.x > width-r) {
74+
vel.x = -vel.x;
75+
vel.mult(getSlider("damp"));
76+
pos.x = width-r;
77+
}
78+
79+
if (pos.y < r) {
80+
vel.y = -vel.y;
81+
vel.mult(getSlider("damp"));
82+
pos.y = r;
83+
}
84+
85+
if (pos.y > height-r) {
86+
vel.y = -vel.y;
87+
vel.mult(getSlider("damp"));
88+
pos.y = height-r;
89+
}
90+
91+
noStroke();
92+
fill(#83DDFF);
93+
if (waterExists) rect(0, height*2/3, width, height/3);
94+
fill(0);
95+
circle(pos.x, pos.y, 2*r);
96+
}
97+
98+
// ===================================================================
99+
100+
int offset = 10;
101+
void addSld(String str, float min, float max, float init) {
102+
cp5.addSlider(str)
103+
.setPosition(10, offset)
104+
.setSize(100, 20)
105+
.setRange(min, max)
106+
.setValue(init)
107+
.getCaptionLabel().setPaddingX(-30);
108+
;
109+
offset += 25;
110+
}
111+
112+
float getSlider(String str) {
113+
return cp5.get(Slider.class, str).getValue();
114+
}

0 commit comments

Comments
 (0)