Difference between revisions of "Render Part A Assignment"
Line 28: | Line 28: | ||
=Code to Implement= | =Code to Implement= | ||
− | |||
Each of the renderable components has its own file in the <code>src/main/ruby/render/assignment</code> directory. | Each of the renderable components has its own file in the <code>src/main/ruby/render/assignment</code> directory. | ||
− | + | ==Equilateral Triangle== | |
{{RubyToImplement|equilateral_triangle|render/assignment|EquilateralTriangle|initialize(half_side_length)<br/>render()}} | {{RubyToImplement|equilateral_triangle|render/assignment|EquilateralTriangle|initialize(half_side_length)<br/>render()}} | ||
Line 52: | Line 51: | ||
[[File:Render_equilateral_triangle.png]] | [[File:Render_equilateral_triangle.png]] | ||
− | + | ==Rectangle== | |
{{RubyToImplement|rectangle|render/assignment|Rectangle|initialize(half_width, half_height)<br/>render()}} | {{RubyToImplement|rectangle|render/assignment|Rectangle|initialize(half_width, half_height)<br/>render()}} | ||
Line 59: | Line 58: | ||
[[File:Render_rectangle.png]] | [[File:Render_rectangle.png]] | ||
− | + | ==Ellipse== | |
{{RubyToImplement|ellipse|render/assignment|Ellipse|initialize(x_radius, y_radius)<br/>render()}} | {{RubyToImplement|ellipse|render/assignment|Ellipse|initialize(x_radius, y_radius)<br/>render()}} | ||
Line 71: | Line 70: | ||
[[File:Render_ellipse.png]] | [[File:Render_ellipse.png]] | ||
− | + | ==Chord== | |
{{RubyToImplement|chord|render/assignment|Chord|initialize(x_radius, y_radius, theta_a, theta_z)<br/>render()}} | {{RubyToImplement|chord|render/assignment|Chord|initialize(x_radius, y_radius, theta_a, theta_z)<br/>render()}} | ||
Line 85: | Line 84: | ||
[[File:Render_chord.png]] | [[File:Render_chord.png]] | ||
− | + | ==Image== | |
{{RubyToImplement|image|render/assignment|Image|initialize(path)<br/>render()}} | {{RubyToImplement|image|render/assignment|Image|initialize(path)<br/>render()}} | ||
Line 92: | Line 91: | ||
[[File:Render_image.png]] | [[File:Render_image.png]] | ||
− | + | ==Text== | |
{{RubyToImplement|image|render/assignment|Text|initialize(text, font)<br/>render()}} | {{RubyToImplement|image|render/assignment|Text|initialize(text, font)<br/>render()}} | ||
Line 99: | Line 98: | ||
[[File:Render_text.png]] | [[File:Render_text.png]] | ||
− | + | ==Point2== | |
− | |||
To support Bézier curves you will want to implement Point in point2.rb. You may wish to use Ruby's convenient [https://ruby-doc.org/core-2.4.2/Struct.html Struct] construct. | To support Bézier curves you will want to implement Point in point2.rb. You may wish to use Ruby's convenient [https://ruby-doc.org/core-2.4.2/Struct.html Struct] construct. | ||
You should be able to construct a Point2 with an x and a y and be able to access those values. | You should be able to construct a Point2 with an x and a y and be able to access those values. | ||
− | == | + | ==Bézier Curve== |
{{RubyToImplement|bezier_curve|render/assignment|BezierCurve|initialize(control_points)<br/>render()}} | {{RubyToImplement|bezier_curve|render/assignment|BezierCurve|initialize(control_points)<br/>render()}} | ||
Revision as of 05:50, 29 November 2020
Contents
OpenGL
GLUT
Code to Investigate
Cavalcade of Graphics
file to run: | src/main/ruby/render/examples/cavalcade_of_graphics.rb |
Code to Implement
Each of the renderable components has its own file in the src/main/ruby/render/assignment
directory.
Equilateral Triangle
file: | src/main/ruby/render/assignment/equilateral_triangle.rb | |
class: | EquilateralTriangle | |
superclass: | initialize(half_side_length) render() |
|
methods: | ' |
The triangle should be equilateral, rendered with its the origin at the center of mass.
Your constructor should accept a half_side_length
parameter.
The height of the triangle should be side_length * sqrt(3)/2
The center of mass is one third from the bottom.
So, the bottom left point A's x coordinate should be -half_side_length
and its y coordinate should be -1/3 height
.
file to run: | src/main/ruby/render/assignment/equilateral_triangle.rb |
Rectangle
file: | src/main/ruby/render/assignment/rectangle.rb | |
class: | Rectangle | |
superclass: | initialize(half_width, half_height) render() |
|
methods: | ' |
file to run: | src/main/ruby/render/assignment/rectangle.rb |
Ellipse
file: | src/main/ruby/render/assignment/ellipse.rb | |
class: | Ellipse | |
superclass: | initialize(x_radius, y_radius) render() |
|
methods: | ' |
Note: to produce the reference image the code below was used:
slice_count = 32 delta_theta = (2*Math::PI) /slice_count
file to run: | src/main/ruby/render/assignment/ellipse.rb |
Chord
file: | src/main/ruby/render/assignment/chord.rb | |
class: | Chord | |
superclass: | initialize(x_radius, y_radius, theta_a, theta_z) render() |
|
methods: | ' |
Note: to produce the reference image the code below was used:
slice_count = 32 delta_theta = (@theta_z-@theta_a) / slice_count
Note: a Chord with 32 slices will have 33 points.
file to run: | src/main/ruby/render/assignment/chord.rb |
Image
file: | src/main/ruby/render/assignment/image.rb | |
class: | Image | |
superclass: | initialize(path) render() |
|
methods: | ' |
file to run: | src/main/ruby/render/assignment/image.rb |
Text
file: | src/main/ruby/render/assignment/image.rb | |
class: | Text | |
superclass: | initialize(text, font) render() |
|
methods: | ' |
file to run: | src/main/ruby/render/assignment/text.rb |
Point2
To support Bézier curves you will want to implement Point in point2.rb. You may wish to use Ruby's convenient Struct construct.
You should be able to construct a Point2 with an x and a y and be able to access those values.
Bézier Curve
file: | src/main/ruby/render/assignment/bezier_curve.rb | |
class: | BezierCurve | |
superclass: | initialize(control_points) render() |
|
methods: | ' |
Quadratic (Second Order) Curve: | ||
Quadratic (Third Order) Curve: | ||
Fourth Order Curve: |
file to run: | src/main/ruby/render/assignment/bezier_curve.rb |
Testing Your Solution
Visual Comparison
file to run: | src/test/ruby/render/part_a/part_a_test_snapshots_web_page_generator.rb |
Unit Test
file: | src/test/ruby/render/part_a/part_a_unit_test.rb | UnitTest |
note: ensure that you have removed all printing to receive credit for any assignment.