Browse Source

Merge pull request #1039 from 01-edu/rust-quest-8-project-motion-public-01-786

update description project motion
pull/1097/head
MSilva95 2 years ago committed by GitHub
parent
commit
08def8f7eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 53
      subjects/project_motion/README.md
  2. BIN
      subjects/project_motion/position_formula.png
  3. BIN
      subjects/project_motion/speed_formula.png

53
subjects/project_motion/README.md

@ -2,16 +2,27 @@
### Instructions ### Instructions
For this exercise you will have to create a [projectile motion](https://cimg2.ck12.org/datastreams/f-d%3Abb024be6673110b31e78b46819e792adaed8dc661e082a61f0a6d64e%2BIMAGE%2BIMAGE.1). For this exercise, you will have to create a [projectile motion](https://cimg2.ck12.org/datastreams/f-d%3Abb024be6673110b31e78b46819e792adaed8dc661e082a61f0a6d64e%2BIMAGE%2BIMAGE.1).
A structure called `Object` will be provided which will have all variables that are Two structures will be provided. A structure called `ThrowObject` that will contain all the variables that are
essential for the projectile physics. (distance, velocity, height, time) essential for the projectile physics (initial position, initial velocity, current position, current velocity and time).
A structure called `Object` which will have the corresponding values of X and Y of the initial position, the initial velocity, the current position and the current velocity.
You must implement : You must implement :
- A function `throw_object` that will initialize the Object with a given velocity and height. - A function `new` that will initialize the ThrowObject with a given initial position and an initial velocity.
- The trait Iterator with the `.next()` in which,the next position of the object after 1 second, must be calculated. - The trait Iterator with the `.next()` in which the position and speed of the object must be calculated after 1 second.
It will return an `Option` with the Object or it will return `None` if the object already reached the floor. It will return an `Option` with the ThrowObject, or it will return `None` if the ThrowObject has already reached the floor.
Consider the value of gravity is 9.8m/(s*s) and that the position (p) in the instant s of an object is given by:
![Position Formula](position_formula.png)
and velocity (v) in the instant s of an object is given by:
![Speed Formula](speed_formula.png)
### Notions ### Notions
@ -24,17 +35,25 @@ You must implement :
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub struct Object { pub struct Object {
pub distance: f32, pub x: f32,
pub velocity: f32, pub y: f32,
pub height: f32, }
#[derive(Debug, Clone, PartialEq)]
pub struct ThrowObject {
pub init_position: Object,
pub init_velocity: Object,
pub actual_position: Object,
pub actual_velocity: Object,
pub time: f32, pub time: f32,
} }
impl Object { impl ThrowObject {
pub fn throw_object(velocity: f32, height: f32) -> Object {} pub fn new(init_position: Object, init_velocity: Object) -> ThrowObject {
}
} }
impl Iterator for Object { impl Iterator for ThrowObject {
// next // next
} }
@ -48,8 +67,7 @@ Here is a program to test your function
use project_motion::*; use project_motion::*;
fn main() { fn main() {
let mut obj = Object::throw_object(50.0, 150.0); let mut obj = ThrowObject::new(Object { x: 50.0, y: 50.0 }, Object { x: 0.0, y: 0.0 });
println!("{:?}", obj.next());
println!("{:?}", obj.next()); println!("{:?}", obj.next());
println!("{:?}", obj.next()); println!("{:?}", obj.next());
println!("{:?}", obj.next()); println!("{:?}", obj.next());
@ -62,10 +80,9 @@ And its output:
```console ```console
$ cargo run $ cargo run
Some(Object { distance: 50.0, velocity: 50.0, height: 145.1, time: 1.0 }) Some(ThrowObject { init_position: Object { x: 50.0, y: 50.0 }, init_velocity: Object { x: 0.0, y: 0.0 }, actual_position: Object { x: 50.0, y: 45.1 }, actual_velocity: Object { x: 0.0, y: -9.8 }, time: 1.0 })
Some(Object { distance: 100.0, velocity: 50.0, height: 125.5, time: 2.0 }) Some(ThrowObject { init_position: Object { x: 50.0, y: 50.0 }, init_velocity: Object { x: 0.0, y: 0.0 }, actual_position: Object { x: 50.0, y: 30.4 }, actual_velocity: Object { x: 0.0, y: -19.6 }, time: 2.0 })
Some(Object { distance: 150.0, velocity: 50.0, height: 81.4, time: 3.0 }) Some(ThrowObject { init_position: Object { x: 50.0, y: 50.0 }, init_velocity: Object { x: 0.0, y: 0.0 }, actual_position: Object { x: 50.0, y: 5.9 }, actual_velocity: Object { x: 0.0, y: -29.4 }, time: 3.0 })
Some(Object { distance: 200.0, velocity: 50.0, height: 3.0, time: 4.0 })
None None
None None
$ $

BIN
subjects/project_motion/position_formula.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
subjects/project_motion/speed_formula.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 2.3 KiB

Loading…
Cancel
Save