14.2.1: struct Examples and Exercises
- Page ID
- 85177
By Carey A. Smith
Structure for simulation of the effect of an earthquake
% The magnitude 6.7 Northridge, California, earthquake of 17 January 1994
% https://pubs.er.usgs.gov/publication/70017610
Earthquake.name = 'Northridge';
Earthquake.year = 1994;
Earthquake.mag = 6.7;
Earthquake.length = 15; % km
Earthquake.vertical = 70; % cm max vertical movement
% https://en.Wikipedia.org/wiki/1994_N...dge_earthquake
Earthquake.duration = 20; % seconds
Earthquake.accel_g =1.82; % g
Earthquake.accel_ms2=Earthquake.accel_g*9.81; % m/s^2
% Simulation parameter
Earthquake.scale = 1.4; % Scale factor for simulations
Solution
Add example text here.
.
- Create a struct for a team of 5 basketball players. They may be men or women, real or fictional. For each member of the team create struct called "player".
- Create the following fields in the "player" structure for each player.:
- Name (a string)
- Position (Choose one of these ‘Center’, ‘Power Forward’, ‘Small Forward’, ‘Shooting Guard’, ‘Point Guard’)
- Height in inches (not feet) Example: 75
- Shirt number
- Fill in you teams structure array with a separate sub-structure for each of the 5 starting players.
- Example. Suppose you had already filled out the structures for the 1st 4 players. Then the 5th substructure could be defined as follows:
player(5).Name = 'Kareem';
player(5).Position= 'Center';
player(5).Height = 84;
player(5).Shirt = 33;
- Create a “for loop” that displays each player’s information on one line. Each field should be separated by a tab “\t” or by 4 spaces. Use \n at the end of the format string to put a new line after each player's info.
Example:
fprintf(' Name Position Height Shirt\n') % \n creates a "new line"
for n=1:5
fprintf('%13s \t%14s \t%i \t %i\n', ... % \t inserts a tab
player(n).Name, player(n).Position, ...
player(n).Height, player(n).Shirt)
end
- Answer
-
Create your own struct.
.
This example creates a triangle struct and uses it to draw 2 right triangles on one figure.
The first routine sets the parameters of each triangle.
The second file is a function that draws a triangle using the parameters in the struct. Only one argument, the struct, is passed to the function. Thus, a struct can group related variables and simplify function calls.
%% Triangle structure demo
clear all, format compact, format shortg; close all; fclose all; clc;
% 1st triangle
Tri1.pos = [-9,-1];
Tri1.width = 18;
Tri1.height= 28;
Tri1.color = 'b';
%% Double-click on a structure in the Workspace to see the details
figure;
draw_triangle(Tri1);
axis equal
%% 2nd triangle
Tri2.pos = [0,4];
Tri2.width = 8;
Tri2.height= 16;
Tri2.color = 'r';
hold on;
draw_triangle(Tri2);
function [] = draw_triangle(Tri)
% Draw a right triangle
x = zeros(1,4); % Need 4 points (1st & last are the same)
y = x;
% 1st point
x(1) = Tri.pos(1);
y(1) = Tri.pos(2);
% 2nd point: to the right, with the same y as point 1
x(2) = x(1) + Tri.width;
y(2) = y(1);
% 3rd point: up, with the same x as point 1
x(3) = x(1);
y(3) = y(1) + Tri.height;
% Last point = 1st point
x(4) = x(1);
y(4) = y(1);
% Debug
x = x
y = y
plot(x,y,Tri.color,'Linewidth',3);
Solution
This is the resulting plot:
.
The logic and code for this exercise is similar to the
1. [5 pts] Create 3 rectangle structures that specify the position, size, and color of 3 rectangles with these characteristics:
% Rectangle 1
rect1.pos= [30,20]; % x and y coordinates of the lower left corner
rect1.width = 500;
rect1.height= 400;
rect1.color = 'b';
% Rectangle 2
rect2.pos= [350,300]; % x and y coordinates of the lower left corner
rect2.width = 220;
rect2.height= 250;
rect2.color = 'r';
% Rectangle 3
rect3.pos= [300,250]; % x and y coordinates of the lower left corner
rect3.width = 150;
rect3.height= 400;
rect3.color = 'c';
2. [7 pts] Write a draw_rectangle(rect) function whose uses a rect structure to plot 1 rectangle. Since variables in a function are local, you can use "rect" for the structure name inside the function. You don't need to use rect1, rect2, rect3.
3. [3 pts] Open a figure, use ”hold on;” and plot these 3 rectangles by calling your rectangle plotting function with each of the 3 rectangle structures.
- Helps:
- Like the draw_triangle function, the draw rectangle function needs to create an x vector & a y vector with the coordinates of the corners. In order to get back to the starting point & close the rectangle, you will need to have 5 pairs of (x,y) coordinates, with the last coordinate being the same as the first coordinate.
- The 1st corner is like home plate. It is in the lower-left corner.
- The 2nd corner is like 1st base. It’s x-coordinate is the 1st corner’s x-coordinate + the width of the rectangle. It’s y-coordinate is the same as the 1st corner’s .
- The 3rd corner is like 2nd base. It’s x-coordinate is the same as the 2nd corner. It’s y-coordinate is 2nd corner’s y-coordinate + the height of the rectangle.Figure out the coordinates of 3rd base. The last line goes from 3rd base to home plate.
- To plot each of the 4 lines, the 1st argument of plot() is a vector of the X coordinates.The 2nd argument of plot() is a vector of the Y coordinates.
- Answer
-
The resulting plot should look like this:
Add texts here. Do not delete this text first.
.