- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
template distance(b1, b2: AstronomicalBody): float64 = dist(b1.pos, b2.pos)
proc attractionForce(body_1, body_2: AstronomicalBody): DVec3 =
let r = distance(body_1, body_2)
let module = (body_1.m * body_2.m) / (r.pow(2))
return normalize(body_2.pos - body_1.pos) * module
proc updateForce(body: var AstronomicalBody, bodies: seq[AstronomicalBody]) =
body.F = dvec3(0, 0, 0)
for other_body in bodies:
if other_body != body:
body.F += attractionForce(body, other_body)
template acceleration(body: AstronomicalBody): float64 = body.F / body.m
template updateAcceleration(body: var AstronomicalBody) = body.a = acceleration(body)
template velocity(body: AstronomicalBody, dt: float64) = body.V + body.F.normalize * body.a * dt
template updateVelocity(body: var AstronomicalBody, dt: float64) = body.V = velocity(body, dt)
template updatePosition(body: var AstronomicalBody, dt: float64) = body.pos += (body.V * dt)
proc updateProperties(body: var AstronomicalBody, bodies: seq[AstronomicalBody], dt: float64) =
body.updateForce(bodies)
body.updateAcceleration()
body.updateVelocity(dt)
body.updatePosition(dt)
Как же "Nim" хорош, как же "Nim" красив, изящен и элегантен!
JloJle4Ka 19.12.2021 15:25 # −1
А его нет, почему-то ничего не компилируется (((
ISO 19.12.2021 16:52 # +2
ASD_77 19.12.2021 16:25 # +1
ASD_77 19.12.2021 16:26 # +1
JloJle4Ka 19.12.2021 18:45 # −1
Где-то мы обсасывали сишный мокрос, где надо куда-то "do {} while (0)" вставить, чтобы программу не попидарасило. А тут оно всё само себя самого это самывает!
А ваш компилятор (особенно C++) так умеет?
ASD_77 19.12.2021 19:08 # +1
JloJle4Ka 20.12.2021 13:05 # 0
ASD_77 20.12.2021 14:00 # −1
JloJle4Ka 20.12.2021 19:10 # 0