0 оценок0% нашли этот документ полезным (0 голосов)

1K просмотров42 страницыFeb 04, 2011

© Attribution Non-Commercial (BY-NC)

PDF, TXT или читайте онлайн в Scribd

Attribution Non-Commercial (BY-NC)

0 оценок0% нашли этот документ полезным (0 голосов)

1K просмотров42 страницыAttribution Non-Commercial (BY-NC)

Вы находитесь на странице: 1из 42

Kelly Cone – Beck

Phil Lazarus – Arup

David Baldacchino – Philo Wilke Partnership (Virtual Presentation)

AB327-4 This class will show you how to leverage your family building knowledge by moving beyond static families and

empowering you to create parametric marvels. Learn some of the essential math and formulas you need to know to help drive

geometry based on required relationships, evaluate and restrict user input to set ranges, use Boolean operations to control

visibility based on other parameter values, and discuss parameter naming strategies. We will also look at advanced formula

examples that calculate complex geometrical relationships to achieve seemingly impossible results.

Jason is the BIM Specialist at Payette in Boston, MA. His experience includes over 14 years in the architecture field, and he

has utilized Revit® for the past six years. He completed 62 projects in Revit while at Colin Smith AutoCAD® Architecture; and

has been managing Revit implementation, training, standards, API, and content development at Payette for the past two

years. With his Revit experience (including health care, labs, commercial, mixed-use and residential), he understands the

challenges that both small and large projects, and firms, face while utilizing and implementing Revit. Jason is also Co-Founder

and Advisor to the Boston Revit Users Group with 380+ members, Co-Founder and Co-Leader of the BLUR Group (BIM

Leaders Utilizing Revit), author for AUGI® AEC EDGE and an avid blogger on BIM and AutoCAD Architecture at

http://jasongrant.squarespace.com.

Kelly Cone is the Innovations Director at the Beck Group, an integrated Development, Architecture, Construction, and

Technology company headquartered in Dallas, TX. Since receiving his master's degree in Architecture from the University of

Texas, Kelly has been focusing on the implementation of BIM across integrated disciplines. This covers a wide range of

software including Autodesk® Revit®, Navisworks®; Innovaya, Synchro Professional, and DProfiler™, our own in-house

macroBIM application. The implementation process includes the creation of customized design-build-oriented content and the

alignment of costing and scheduling assemblies to that content. Kelly plays an integral role in representing Beck's BIM

capabilities, attending and speaking at numerous conferences and teaching classes about BIM. He is also heavily involved in

the BIM community at large participating in the AUGI® Revit forums and through the Web site, www.bimexpert.com which he

co-founded.

Phil Lazarus is a licensed architect who has been using 3D in the design of large projects for the duration of his career.

Involved primarily with stadia and convention facilities, he has never worked on a building less than 1 million square feet and

has used BIM to address the needs of architects, engineers and builders through all phases of design and construction. In

every organization he has joined, Phil has become responsible for training staff members in advanced CAD, 3D modeling and

BIM techniques. Holding a Masters of Business Administration, Phil is particularly interested in how technology can be used to

increase cost efficiency both in design practice and on the job site. Currently based in Singapore, he is the author of the blog

BIM TROUBLEMAKER which focuses on advanced family making and form finding techniques in Revit®.

AB327-4 Fuzzy Math Essentials for Revit Family Builders

David Baldacchino and Steven Campbell presented this session for Autodesk University 2008. They both had the

desire and passion to present this session again but were unable to join us in person. Their input and knowledge is

part of this presentation in every part. We thank you for your help and allowing us to take the reins of this session.

David has over 10 years of architectural experience working mostly on Educational Facility projects, and was the team leader

on the Revit pilot projects in the Houston office of his former employer. He holds a Masters of Architecture degree from Texas

A&M University and has been using Autodesk software professionally ever since. He recently joined PhiloWilke Partnership, a

Texas mid-sized firm specializing in Research Facility and Healthcare projects, and is currently leading the effort to build an

internal knowledge management system and improve the content and detail library in addition to project work. David enjoys

mentoring his peers and helping project teams to succeed in the use of Revit. In his free time he can be found posting articles

on his blog and contributing to AUGI as Tips & Tricks forum manager and Revit Community Chair.

Steven originally joined Revit® Technology Corporation in early 2001 as a content developer. In 2002, Autodesk bought Revit

and integrated it into their product line. After Autodesk acquired Revit, Steven split his role between content creation and QA,

during which he was responsible for product testing in relation to content and content development. In 2007, he was promoted

to Project Manager for all of Revit Content. He is also the technical lead to all content-related work. Additionally, he taught at

AU in 2005 and 2007, ADN in 2007 and 2008, and other Autodesk internal events. Steven graduated with a Bachelor of

Architecture from Roger Williams University in Bristol, Rhode Island in 1989. He has worked for a variety of architectural firms

in New England on small to mid-size commercial projects and high-end residential homes.

2

AB327-4 Fuzzy Math Essentials for Revit Family Builders

IN TRODUCTION

While many have learned the art of creating Revit Family Content, few have mastered leveraging the power of Revit

through formulas. This class will assume that one has an intermediate knowledge of Revit, understanding of the key

family building concepts and a desire to learn how to advance the strength of Revit Family Components through the

use of formulas. Formulas allow one to create a component that is immensely more flexible than simple parameters,

allow for work-arounds to the 0'-0" dimension, arrays less than 2, if statements, built-in intelligence and safeguards.

Through the experience of multiple individuals from five different companies, we will show examples of how formulas

can be put into practice.

Before we start with the specifics of different formulas and how they can be used practically, we will cover the

general formulas that are available to one in all verticals of Autodesk Revit.

NOTE: Due to the expressions used within the formulas, one should refrain from using any of the following

expressions within the names of parameters to avoid any confusion within the calculations. Parameter names are

case-sensitive and the formula will provide an error if one does not retype the parameter name exactly.

Addition + Add lengths, numbers or parameters

Subtraction - Subtract lengths, numbers or parameters

Multiplication * Multiply lengths, numbers or parameters

Division / Divide lengths, numbers or parameters

Exponentiation x^y, x raised to the power of

y

Logarithm Log

Square Root sqrt(Value)

Sine Sin Used within triangle geometry calculations.

Cosine Cos Used within triangle geometry calculations.

Tangent Tan Used within triangle geometry calculations.

Arcsine Asin Inverse triangle geometry calculations

Arccosine Acos Inverse triangle geometry calculations

Arctangent Atan Inverse triangle geometry calculations

e raised to an x power Exp

Absolute Value Abs

Pi - 3.1415926535..... pi Figure the circumference or area of a circle

Supported Conditional

Expression Description

Operators

Equal To = Parameter is equal to length, number or text

Less Than < Parameter is less than length or number

Greater Than > Parameter is greater than length or number

AND And Both statements are True

OR Or One of the statements are True

NOT Not Statement is False

<= or >= Not supported in Revit Using this within a calculation will result in an error

If Statements Formula

if statements (simple) if(<condition>, <result-if-True>, <result-if-False>)

if statements (multiple) if(<condition>, <result-if-True>, if(<condition>, <result-if-True>, if(<condition>, <result-

if-True>, <result-if-False>)))

If statement (with If(<and, or, not>(<condition>, <condition>), <result-if-True>, <result-if-False>)

Boolean)

3

AB327-4 Fuzzy Math Essentials for Revit Family Builders

One will find throughout this presentation that "If" statements are used as much, if not more, than other mathematical

equations. Some "If" statements are implied as seen in the Boolean examples whereas some will include 'If" in the

formula. In general, these formulas can create a return value of real numbers with multiple decimals, integers,

lengths, areas, volumes, angles, yes/no boxes and text. Examples of these "If" statements are shown below:

IF(Parameter A, 1, 2)

This number or integer parameter looks at yes/no (Parameter A). Therefore, IF Parameter A is YES, then number

1 would be inserted for this parameter and if Parameter A is NO it would insert number 2.

IF(Parameter A, "X", "")

This text parameter looks at yes/no (Parameter A). Therefore, IF Parameter A is YES, then text X would be

inserted for this parameter and if Parameter A is NO it would insert no text in this field.

IF(Parameter A, 1'-0", 2'-0")

This length (dimension) parameter looks at yes/no (Parameter A). Therefore, IF Parameter A is YES, then the

dimension would be 1'-0" for this parameter and if Parameter A is NO it the dimension would be 2'-0" in this field.

IF(Dimension A = 1'-0", 1, 2)

This number parameter looks at length parameter (Dimension A). Therefore, IF Dimension A equals 1'-0", then

number 1 would be inserted for this parameter and if Dimension A does not equal 1'-0" it would insert number 2.

In lieu of equals, < less than or > greater than could be substituted to alter the results. Similar to the examples

above, if this were a text parameter one could get a result of a text result if the text is in quotes and it could also

respond with a dimension if this were a dimension parameter.

IF(Text A = "Long", 10'-0", 1'-0")

This dimension parameter looks at text parameter (Text A). Therefore, IF Text A field has Long written in it then

the dimension would be 10'-0" and if it has different text or no text then the dimension would be 1'-0". In lieu of a

dimension parameter, this equation could return another text response, integer or a number response.

IF(AND(Parameter A, Parameter B), 1, 2)

This number parameter looks at both of the yes/no parameters for (Parameter A) and (Parameter B). Therefore if

both Parameter A and Parameter B are YES, then number 1 would be inserted but if either Parameter is NO then

number 2 would be inserted.

IF(OR(Parameter A, Parameter B), 1, 2)

This number parameter looks at both of the yes/no parameters for (Parameter A) and (Parameter B). Therefore if

Parameter A or Parameter B are YES or both are YES, then number 1 would be inserted but only if both

Parameter A and Parameter B are NO then number 2 would be inserted.

IF(NOT(Parameter A), 1, 2)

This number parameter looks at (Parameter A). Therefore if Parameter A is NOT YES, then number 1 would be

inserted but if Parameter A is YES then number 2 would be inserted.

4

AB327-4 Fuzzy Math Essentials for Revit Family Builders

KEY POINTS OF FORMULAS

Simplify User Controls

Formulas can be used to reduce the number of parameter variables that a user needs to adjust.

Dependant Parameters

If one parameter is dependant of another then one change to either one will adjust the other parameter.

Multiple Dependencies

If a parameter is dependent on multiple parameters, then the result is a grayed out result which can only

be altered by adjusting one of the dependent parameters.

Converting Units

Sometimes it is required to alter the units of a parameter in order to utilize it in specific formulas. For

example, to switch a Length parameter to a number one would use (LENGTH * 12) / 1'

KEY TOPICS OF THIS SESSION

Planning and Documenting one's work

Parameter Naming

Boolean Operators - AND, OR, NOT; Evaluating YES/NO parameters to drive other YES/NO

parameters. Immeasurably valuable to assist in visibility controls.

Circles

Ellipses

Massing

Schedules

5

AB327-4 Fuzzy Math Essentials for Revit Family Builders

PLANNING

Pre-planning a family component can be useful for not only the one creating the component but for those who will

use the component. Some of the benefits to planning a complex component is that one can fully see and think

through all of the required parameters, be able to better organize the parameters within the component and that one

can share how the component will work with users before a single piece is built. User feedback can help the builder

with feedback and suggestions before one has invested a great deal of time.

This example shows the planning of a "super" casework family. This was shared with the power users of the firm to

get feedback on the options available in the "User Parameters". The user parameters are those which are shown in

the properties. The "Hidden Parameters" are those nested within the component and thus does not "muddy" up or

confuse the user with unnecessary parameters. A PDF version of this image is included in the dataset.

DOCUMENTING

By creating a plan, one has also accomplished documenting the work needed to create the component. This can be

used for future understanding of the component when changes or additions are required.

It is important to stay consistent with the naming and organizing of Parameters. If each family that one creates is

different, then not only could a user be confused in how to control a component but the creator could also easily get

confused. There is no right way to name or organize the parameters but the key is staying consistent.

For example:

• One may create all calculation parameters with CALC at the end of the parameter and place all calculation

parameters in construction.

• Someone else may just name them without a identifier but place all calculation parameters in constraints.

• Either way is fine as long as one is consistent and users can understand what they need to change.

6

AB327-4 Fuzzy Math Essentials for Revit Family Builders

ROUN DIN G

NUMBERS

Rounding Numbers is actually quite easy. One would have their main input number parameter, then have

another parameter that references the input number and either adds 0.49 to round the number up or subtract 0.49

to round the number down. For example:

Input Number = 6.77 (Either as a result from another formula or user entered value)

To round the number up

Rounded Number = Input Number + 0.49 (This must be an integer parameter to work correctly)

To round the number down

Rounded Number = Input Number - 0.49 (This must be an integer parameter to work correctly)

This can then be added to a more complex formula utilizing an "if" statement if one wanted to switch between

Rounding Up and Rounding Down with a yes/no parameter.

Rounding Checkbox = (User would check to round up and leave unchecked to round down)

To round number either up or down

Rounded Number = Input Number + if(Rounding Checkbox, 0.49, -0.49)

Note: The Rounded Number parameter must be an integer parameter to work correctly

DIMENSIONS

Rounding Dimensions takes a few more steps then its numbers counterpart. There are a few ways that I have

seen some doing this, but I find this process to be very efficient.

Rounding Value = (Rounding Value: Positive Number for Up and Negative for Down)

Num of Rounding Value = (Integer Parameter with Formula)

Dim Rounded = (Final Rounded value of the Main Dim)

To determine the Number of Rounding Value one must utilize the formula shown above. The main dimension is

converted to a number, added to the rounding value which is converted to a number, divided by two and then the

value is divided by the rounding value, which once again is converted to a number. Since the Num of Rounding

Value is an integer, straight dimensions (length parameters) will create an error.

To conclude the rounding, one must then take the Num of Rounding Value and multiply the Rounding Value. This

will result in a rounded up dimension if the Rounding Value is positive and a rounded down dimension if the

Rounding Value is negative.

7

AB327-4 Fuzzy Math Essentials for Revit Family Builders

B OOLEA NS

Revit object that is altered by and, or, not Boolean logic operators.

User Controls

In this example there are checkbox (user) controls for Object A,

Object B, Object C, Or Boolean Operators and if Or Boolean Object A - Yes/No Checkbox

Operators is not checked then AND Boolean Operators is "by Object B - Yes/No Checkbox

default" checked. Depending on the options a user selects, Object C - Yes/No Checkbox

different parts of the object display. Or Boolean Operators - Yes/No Checkbox

And Boolean Operators - Yes/No Checkbox

8

AB327-4 Fuzzy Math Essentials for Revit Family Builders

AND - Object A Selected AND - Objects A+B Selected AND - Objects A, B + C Selected

AND Operators

CALC VIS Object A and(not(Object B), not(Object C), Object A)

CALC VIS Object B and(not(Object A), not(Object C), Object B)

CALC VIS Object C and(not(Object A), not(Object B), Object C)

CALC VIS Object AB and(and(Object A, Object B), not(Object C))

CALC VIS Object BC and(and(Object B, Object C), not(Object A))

CALC VIS Object AC and(and(Object A, Object C), not(Object B))

VIS Result ABC and(Object A, Object B, Object C)

OR Operators

VIS Result A

if(OR Boolean Operators, or(CALC VIS Object A, CALC VIS Object AB, CALC VIS Object AC, VIS Result ABC),

CALC VIS Object A)

VIS Result B

if(OR Boolean Operators, or(CALC VIS Object B, CALC VIS Object AB, CALC VIS Object BC, VIS Result ABC),

CALC VIS Object B)

VIS Result C

if(OR Boolean Operators, or(CALC VIS Object C, CALC VIS Object AC, CALC VIS Object BC, VIS Result ABC),

CALC VIS Object C)

VIS Result AB

if(OR Boolean Operators, or(CALC VIS Object AB, VIS Result ABC), CALC VIS Object AB)

VIS Result AC

if(OR Boolean Operators, or(CALC VIS Object AC, VIS Result ABC), CALC VIS Object AC)

VIS Result BC

if(OR Boolean Operators, or(CALC VIS Object BC, VIS Result ABC), CALC VIS Object BC)

9

AB327-4 Fuzzy Math Essentials for Revit Family Builders

For one to be able to have flexible input for users, there needs to be one parameter for user input and another

parameter that drives the geometry which utilizes and evaluates the user's input.

In many cases, one will want the user to be able to enter a result of zero for a number or integer parameter either for

scheduling purposes or for a user to better understand the family without the need for instructions or explanation.

Arrays are a prime example where one may want a result of 0 or 1 but as one would discover, this creates an error

in the family. If one has a cabinet that has an option for shelves within it, there may be zero shelves and there may

be 3. To work around this one would need to use a few formulas:

Array Control (Integer), Number of Shelves (Integer), Shelf 1 (Yes/No), Shelf 2 Plus (Yes/No)

The formulas are:

Number of Shelves = "Whatever the user needs and enters"

Array Control = if(Number of Shelves < 2, 2, Number of Shelves)

Shelf 1 = Number of Shelves = 1

Shelf 2 Plus = Number of Shelves > 1

The user enters the Number of Shelves and the Array Control parameter evaluates it the Number of Shelves is less

than 2. If it is less than 2 then it will keep the array at 2. If it is 2 or more then it uses the user entered Number of

Shelves. Shelf 1 will turn on the visibility of a single shelf if the Number of Shelves equals 1. Shelf 2 Plus turns on

the visibility of the array if the Number of Shelves is 2 or more. A very similar process can be used to control the

max value of a user entered value.

There are cases where the dimension needs to be controlled for either a minimum value or a maximum value or

both a minimum and maximum.

Length Control = if(Length < 2', 2', Length)

If the user inputted length is less than 2 feet, then the control will keep 2 feet and if it is more than 2 feet then it will

use the inputted user entered length.

To control a maximum dimension one would use:

Length Control = if(Length > 10', 10', Length)

If the user inputted length is more than 10 feet, then the control will keep 10 feet and if it is less than 10 feet then it

will use the inputted user entered length.

To control a minimum and maximum dimension one would use:

Length Control = if(Length < 2', 2', if(Length > 10', 10', Length)

If the user inputted length is less than 2 feet, then the control will keep 2 feet and if it is more than 10 feet then it will

keep 10 feet as the maximum and if it is between 2 and 10 feet then dimension will use the inputted user entered

length.

Reporting Parameters can now be used to essentially "report" on a dimension and not receive an "over constrained"

error. For instance, on a door one would have door height and frame head height. To report on the floor to top of

frame dimension one could utilize a reporting parameter which would return the height. This can be used instead of

creating a calculation parameter that adds each dimension string to get the combined length. NOTE: Reporting

Parameters can only be used within a formula if it dimensions a host object. Therefore, one can utilize, for example,

the width of a wall to drive other geometry. It can also be a way of having one less formula within a family if it

dimensions reference planes or other geometry, just keep in mind that these uses of a reporting parameter cannot

be used within a formula. You can find more info posted here on reporting parameters: Link

10

AB327-4 Fuzzy Math Essentials for Revit Family Builders

CONDITIONAL VISIBILITY BASICS

Before we look at Conditional Visibility, let’s confirm we have a grasp on the basic concept of visibility in family

building.

If you select any object in the family editing environment, on the properties panel you will see a parameter called

VISIBILITY with a check box next to it. This parameter controls whether the object is VISIBLE (On) or INVISIBLE

(Off). If turned off, the object’s display will change and the form will not show when the family is hosted.

parameter on the properties

panel is a little grey box which

allows us to link this parameter

to other functions in our family.

We are only allowed to link to

“YES/NO” parameters.

Thus, visibility is a binary function to be controlled, It’s a YES/NO or TRUE/FALSE question. As such, we can

program our family a GREATER THAN/LESS THAN EQUATION, based upon other parameters, to control this

switch.

We can also use Boolean Operations, based upon the status of other YES/NO parameters in our family.

11

AB327-4 Fuzzy Math Essentials for Revit Family Builders

Here is an example of these concepts in action. The first example examines controlling the number of rows in a

tiered seating family.

seating tread. Within this family are instance-based

INTEGER Parameters for row ID number, as well as

the desired number of rows in the entire assembly.

Visibility of the extruded form is controlled by a

formula comparing these two parameters.

Once nested in a host family, the necessary parameters are linked. Then controlling the number of rows is very

easy:

Please note, Revit does not understand “Greater Than or Equal To” so it is important to include “+/-1” in your

desired number of objects formula! Plan carefully!

12

AB327-4 Fuzzy Math Essentials for Revit Family Builders

the next level of detail involved with

developing a seating section could

include inserting a step. The height of

the step would vary, along with the

vertical distance between rows.

Programming the step height to

change is a straight-forward affair, but

what about when we need to choose

between one step, two steps and no

steps? That’s where Boolean

operations become useful.

I have now nested 2 families into my basic extrusion and linked their visibility to parameters called “Step Single” &

“Step Double”. The overall visibility is controlled by looking at the height difference between rows, whether the row

exists, and whether or not an aisle is desired in this section.

And now cycling through various steepness settings for the assembly, we can see the step configuration change:

13

AB327-4 Fuzzy Math Essentials for Revit Family Builders

possible

combinations of

Boolean operations

using 3 parameters.

VISIBILITY OF VOIDS

Controlling the visibility of voids presents a different challenge. Void forms do not have an inherent VISIBILTY

parameter, so what can we do to turn them on or off? The easiest method is to simply move them away from the

form they intend to cut.

By way of example, let’s look at a potential door family and we want the option to cut a vision hole.

14

AB327-4 Fuzzy Math Essentials for Revit Family Builders

The “Door” form is hosted on the primary vertical reference plane. An additional reference plane has been drawn

and its position relative to the “Door” is controlled by the parameter ‘Void_Offset”. Once a cutting relationship is

established, the void can move into or away from the mass as specified.

VALUE = IF(FORMULA, RESULT IF YES, RESULT IF NO)

The earlier covered logic related to rounding numbers can

be helpful in setting up limiters to avoid the “Line is Too

Short” error message.

equals zero or less, Revit throws up the error. By using

an IF/THEN statement to control the Riser Height

indirectly, this error can be avoided as shown.

imperceptible and

good enough to

maintain the integrity

of the family

15

AB327-4 Fuzzy Math Essentials for Revit Family Builders

A RRA YS

INTRODUCTION TO LINEAR ARRAYS

The array tool is quite powerful, especially when used in the Family Editor. We can control the number of arrayed

elements and their visibility through logical formulas, resulting in very useful dynamic families. Let’s take a look at an

example using the Detail Component line based family template where we will build a flexible plywood section

component family that is perfect for detailing work.

In the planning stages it was determined that we needed plywood of varying thicknesses. This meant that the

arrayed elements needed to resize accordingly. The family was expected to work at any length, so we needed to

take care of a chronic array problem when the calculated number of arrayed elements was less than 2, causing the

family to break.

NESTING

When creating a parametric array, Revit

creates grouped instances of the arrayed

elements. This causes a problem when

trying to resize elements within those

groups, such as detail lines for example.

To solve this issue, it is considered best

practice to create a separate parametric

family for the component to be arrayed and

then nest that into the line based family,

where you’ll apply the relevant constraints

and array it as required.

Revit wants to have at least 2 elements in

an array. However that usually is not how

things work in real life and we might need

just one element. We can get around this

problem as follows:

1. Write the array formula to force the

calculated value to 2 or greater by

using an “If” statement;

2. Add a calculated visibility parameter

that turns off the arrayed elements

when you want less than 2 elements;

3. Add a singular element in your family,

constrain it as desired (usually with EQ

constraints) and add a calculated

visibility parameter that turns on this

element only when needed.

Above you can see that the Array integer is forced to a value of 2 if Length is less than or equal to 6”. Note that to

express this in Revit, you have to use the expression not(Length > 0’ 6”), which achieves the same result. The

reason for using 6” as the threshold is due to Array evaluating to 1 when Length is 5”, which causes the family to

fail. A good rule of thumb is to set your threshold to 1.5 x the required spacing. Note also in the above example that

with a Length of 7”, the single (non-arrayed) element will be turned off and the arrayed elements (controlled by

VIZ_multiple) will be visible.

16

AB327-4 Fuzzy Math Essentials for Revit Family Builders

last members of the array have

been constrained to a fixed distance

of 1 ½”. The highlighted middle

element will only be visible for short

family instances, at which point the

array is forced to 2 elements and

element visibility is turned off.

create the array and don’t know how

to proceed in adding the necessary

parameters. But it’s a simple task

once you get the click sequence

down!

2. Hover above any of the arrayed elements until the array “skeleton” is displayed. Click on it.

3. Pick the applicable label or create a new parameter.

parameter to uncheck when needing to control visibility

on either side of a family, is to include some type of

identifier using invisible lines.

17

AB327-4 Fuzzy Math Essentials for Revit Family Builders

TRIA NG LE GEOMETRY

Triangle geometry is found in numerous families even when least expected. When creating a parametric and

complex component, one will usually come across an area where if triangle geometry is used, the component will

operate more reliably. Below are just a few examples:

Defining a triangle's 3 sides and 3 angles can provide flexibility within component creation. To define the parts of a

triangle, one will need to understand the various Laws of Triangles.

2 2 2

Pythagorean Theorem: a + b = c

2 2 2 2 2 2

Law of Cosines: a = b + c - 2bc cosA or b = a + c - 2ac cosB

2 2 2

or c = a + b - 2ab cosC

Sine, Cosine and Tangent are the typical trigonometric functions and ArcSine, ArcCosine and ArcTangent are the

inverse of these typical trigonometric functions. Examples are:

x = sin y or y = arcsin x, x = cos y or y = arccos x, x = tan y or y = arctan x

18

AB327-4 Fuzzy Math Essentials for Revit Family Builders

19

AB327-4 Fuzzy Math Essentials for Revit Family Builders

In the recorded session this example will be explained and the component is in the uploaded dataset.

20

AB327-4 Fuzzy Math Essentials for Revit Family Builders

CIRCLES

From Wikipedia, the free encyclopedia

Circle illustration showing a radius, a diameter, the centre and the circumference, other parts…

FORMULAS

Length of circumference

Further information: Pi The ratio of a circle's circumference to its diameter is π (pi), a constant that takes the same

value (approximately 3.141592654) for all circles. Thus the length of the circumference (c) is related to the radius (r)

by or equivalently to the diameter (d) by

Area enclosed

Area of the circle = π × area of the shaded square. Equivalently, the area is π multiplied

by the radius squared:

Cartesian coordinates

Circle of radius r = 1, centre (a, b) = (1.2, -0.5)

In an x-y Cartesian coordinate system, the circle with centre (a, b) and radius r is

the set of all points (x, y) such that

If the circle is centered at the origin (0, 0), then the equation simplifies to

The equation can be written in parametric form using the trigonometric functions

sine and cosine as

Tangent lines

2

When the centre of the circle is at the origin then the equation of the tangent line becomes x1x + y1y = r ,

and its slope is.

21

AB327-4 Fuzzy Math Essentials for Revit Family Builders

Chords

Chords were used extensively in the early development of trigonometry. The first

known trigonometric table, compiled by Hipparchus, tabulated the value of the Chord

function for every 7.5 degrees.

The chord function is defined geometrically as in the picture to the left. The chord of

an angle is the length of the chord between two points on a unit circle separated by that

angle. By taking one of the points to be zero, it can easily be related to the modern

sine function:

Sagitta

The sagitta (also known as the versine) is a line segment drawn perpendicular to a chord, between the midpoint of

that chord and the arc of the circle.

Given the length y of a chord, and the length x of the sagitta, the Pythagorean theorem can be

used to calculate the radius of the unique circle which will fit around the two lines:

• Generic Model Families can be imported into Masses and used to create geometry. Complex masses may

require hundreds of constraints, so as with any family, nesting can greatly reduce the complexity of the

constraints in the Massing family.

• Typically use face based for ease of placement in the massing editor.

• Create model lines, keep them visible, and constrain and flex them to your heart’s content.

The example we’ll use is of the building footprint for a project recently completed. This shape was highly parametric

by necessity. The property lines were in flux, the building FAR requirements changed multiple times, and the client’s

desire to be as close to FAR as possible was a major driving factor. So, we built the building mass over several days

to allow the kind of flexibility needing throughout the whole project…

flexibility in the shape. You might ask, why not re-draw it

every time? Well, below is an image of the curtain systems

applied to the faces of the mass we end up with… If we had

to re-draw the shape we would have to re-make the faces

which means all the custom curtain panels and mullions

would be lost every time we had a façade change. We had

over 100 façade shape changes on this project – you do the

math.

starting with NT are for the “North

Tower” which is the shorter tower that is

plan left. ST is for South Tower which is

taller and plan right.

22

AB327-4 Fuzzy Math Essentials for Revit Family Builders

Lots of calculations, I know… We’ll focus on the overall stuff first to keep things simpler.

which also happens to be the origin or 0,0 for the family. You

don’t see an ellipse in the mode lines, but it will get cut out

later. For now, it is this intersection:

23

AB327-4 Fuzzy Math Essentials for Revit Family Builders

Since both the back corners of the building are filleted, the “Ellipse to ST/NT Core Edge” parameters refer to the

distance from the Center to the edge of the line BEFORE the fillet starts.

Ellipse to North/South Edge is the distance to the farthest point north or south, and is determined by taking the

Ellipse to Core Edge value and adding the N/S Core Fillet Radius values.

Ellipse to Back is the distance from the Center to the back edge.

Those parameters determine the placement of all these lines, but they aren’t enough on their own.

Arc on two 90 degree lines…

You just use the ST Core Site Fillet Radius parameter

and apply it to all three dimension strings. Done. This

now flexes like a champ.

toggle to make them much easier to constrain!

complicated since we’re trying to create a fillet arc

between a line and a parametric arc. Yuck!

24

AB327-4 Fuzzy Math Essentials for Revit Family Builders

Why is it so complicated?

Well, since depending on the

location and radius of the

main arc, this fillet arc needs

to start and stop at different

points. We have to manually

calculate this because Revit

won’t actually keep a fillet arc

properly constrained to

another arc like it should! –

Factory, this needs some

work…

Instead, we need to

calculate the following

parameters ourselves

using a couple of tricks.

The first one is that the

center of a fillet arc of a

given radius is always at

the intersection of the

offset versions by the

same distance of the

objects to be filleted.

What does that mean?:

dimensions to figure a lot

of this out. Second, we’re

going to exploit the

definition of a chord as

defined in the Circle stuff above:

So, to simplify C=2*sin(A/2) Unfortunately, since this is a parametric form and both the length of the chord AND the

angle are “unknown”, we

need some more help.

Here we’ll turn to the

versine/sagitta definition

for this. A perpendicular

bisector is always the

radius of a circle. The

Sagitta is the part of the

perpendicular bisector

that is past the chord, and

the Apothem is the part

on the other side of the

chord. So, the Radius =

Apothem + Sagitta. Now,

we’ve got enough to use

basic trigonometry to

solve for the circular

angle!

25

AB327-4 Fuzzy Math Essentials for Revit Family Builders

SOH CAH TOA tells us that Cos(O)=A/H We need “O”. So, O = acos(A/H). For us, the Hypotenuse is the Radius,

and the Adjacent side is the Apothem. We can calculate the Apothem from the overall dimensions of the project! So

the parameters:

ST Distance to Chord

This is our Apothem. We can calculate it from the center of the

circle with addition and subtraction. Formula: Ellipse to ST

Core Edge + ST Core Side Fillet Radius

ST Front Side Fillet Radius – ST Main Arc Center from Ellipse

ST Intersect Radius

This is the radius. We can calculate it using the Main Arc

radius and the fillet arc radius. Formula: ST Main Arc Radius

ST Front Side Fillet Radius

ST Half Chord Angle

We don’t need the whole chord angle, just the half above the perpendicular bisector. Formula: acos(ST Distance to

Chord / ST Intersect Radius)

ST Front Side Fillet Angle

Equal to the Half Chord Angle.

ST Main Arc Angle to Center

This is the inverse of the Half Chord Angle. Formula: 90° - ST Half Chord Angle

ST Fillet Arc end from Face

The last thing we need is to locate the center of the fillet radius along the Y axis, as this sets the end of the straight

section of façade on the right (South) side. This can also be obtained with trig. Formula: ST Main Arc Radius

(ST Intersect Radius * sin(ST Half Chord Angle))

The north side makes the south look easy because instead of having a consistent variable (the 90 degree side) we

have the side of the shape as a variable angle as well.

Parameters:

These are similar to the ST, but there are a few more. There is

the NT Side Angle which defines the plan angle of the side of

the tower. Also unlike the ST, the Front Side and Core Side

Fillet radii are set to be equal. This is needed to keep the math

simple. You could solve this with these being different, but I’m

not that much of a geek. To make this work we’re going to use

a polar origin concept – in other words, the same rules that

applied on the ST will be applied to the NT, but based off the

rotation point of the NT side so that everything plays nice…

Since the side changes angle, so does the fillet arcs extents.

Formula: 180° - NT Side Angle - Zero Degrees

NT Distance to Chord

This is different due to the changing angle of the chord dividing

the circle. We need to define this using CAH solving for the

adjacent side. This introduces two new parameters for the

angle and the hypotenuse of a theoretical triangle per the

image.

26

AB327-4 Fuzzy Math Essentials for Revit Family Builders

Formula: (NT Arc Center to Core Fillet Center * cos(NT Chord Distance Angle))

Solved by using Pythagorean

Theorem and overall

dimensions. Formula:

sqrt((Ellipse to NT Core Edge -

NT Main Arc Center from

Ellipse) ^ 2 + (NT Main Arc

Radius - NT Main Arc Face

past Ellipse - Ellipse to Back +

NT Core Side Fillet Radius) ^ 2)

Solved by using Triangle Angle

Theory. Formula: NT Side

Angle - NT Angle Arc Center to

Core Side Fillet Center

Side Fillet Center

Solved by using the tangent relationship and overall dimensions. Formula: atan((Ellipse to NT Core Edge - NT Main

Arc Center from Ellipse) / (NT Main Arc Radius - NT Main Arc Face past Ellipse - Ellipse to Back + NT Core Side

Fillet Radius))

NT Intersect Radius

Formula: NT Main Arc Radius - NT Front Side Fillet Radius

Since we have normalized for the Chord Angle, we can now use the same formula as the ST. Formula: acos(NT

Distance to Chord / NT Intersect Radius)

Equal to NT Half Chord Angle

Here we have to normalize to the angle again. So, we need to add the inverse angle of the side angle to the NT Half

Chord angle before subtracting it from 90 degrees. Formula: 90° - (90° - NT Side Angle + NT Half Chord Angle)

We still need to tell the side where to stop, and since it is angled we’ll do that with two parameters. The vertical

length is the length of the adjacent side of the triangle made between the north edge of the building and the angled

side. To get it we can take the vertical component of the triangle with a hypotenuse between the main arc center and

the front fillet arc center and then subtracting the vertical distance from the Core side center to the main arc center.

Formula: (NT Intersect Radius * cos(NT Main Arc Angle to Center)) - (NT Main Arc Radius - NT Main Arc Face past

Ellipse - Ellipse to Back) - (NT Core Side Fillet Radius)

NT Side Length

To get the actual side length, we use CAH again. Formula: NT Side Vertical Length / cos(90° - NT Side Angle)

isosceles

27

AB327-4 Fuzzy Math Essentials for Revit Family Builders

client sings…

Late in SDs, the

property line

changes, and to

squeeze out every

bit of available

space the straight

part of the NT side

became curved.

This made things

fun…

Since this angle is an isosceles triangle with the different side at 75 degrees, the other side has to be 75 degrees

too. Since a triangle’s angles always add to 180 degrees, we know what to do. Formula: 180° - NT Side Angle * 2

Since this is an isosceles triangle, both sides are the radius of a circle, and that makes the NT Side Length a Chord.

We already know we can bisect a chord to get two right triangles, so we can use SOH solving for H to get the radius

required to have the lines close. Don’t forget to add the fillet radius though since we’re calculating from the

intersecting arcs! Formula: (0.5 * NT Side Length) / (sin(0.5 * NT Side Curve Angle)) + NT Front Side Fillet Radius

We’ll get into this in the demonstration, but I’ll tell you that one key to making this work when you draw it is

to define successive reference lines as the workplane and then draw the next line on that workplane. This

keeps you from having to calculate the start and end point of every line, just the ones where they seamed

together.

• Flex it.

Once you’ve got this drawn, you can create form from it and flex it until your head or the family explodes!

Combine this with a bunch of other line based nested families and you can get this monster mass… see the

footprint is the same?

28

AB327-4 Fuzzy Math Essentials for Revit Family Builders

ELLIPSES

From Wikipedia, the free encyclopedia

FORMULAS

Eccentricity

The eccentricity of the ellipse is

Directrix

minor axis called a directrix. Refer to the illustration on the right. The

distance from any point P on the ellipse to the focus F is a constant

fraction of that point's perpendicular distance to the directrix

resulting in the equality, e=PF/PD. The ratio of these two distances

is the eccentricity of the ellipse.

Besides the well known ratio e=f/a, it is also true that e=a/d.

Area

The area enclosed by an ellipse is πab, where (as before) a and b are one-half of the ellipse's major and minor axes

respectively.

2 2

If the ellipse is given by the implicit equation Ax + Bxy + Cy = 1, then the area is

Circumference

The circumference C of an ellipse is: where the function E is the complete elliptic integral of the

second kind.

General ellipse

In analytic geometry, the ellipse is defined as the set of points (X,Y) of the Cartesian plane that, in non-degenerate

[13][14]

cases, satisfy the implicit equation

2

provided B − 4AC < 0.

29

AB327-4 Fuzzy Math Essentials for Revit Family Builders

Canonical form

By a proper choice of coordinate system, the ellipse can be described by the canonical implicit equation

Any ellipse can be obtained by rotation and translation of a canonical ellipse with the proper semi-

diameters. Translation of an ellipse centered at (Xc,Yc) is expressed as

In trigonometry

An ellipse in general position can be expressed parametrically as the path of a point (X(t),Y(t)), where

as the parameter t varies from 0 to 2π. Here (Xc,Yc) is the center of the ellipse, and φ is the angle between the X-

axis and the major axis of the ellipse.

Parametric equation for the ellipse (red) in canonical position. The eccentric

anomaly t is the angle of the blue line with the X-axis.

For an ellipse in canonical position (center at origin, major axis along the X-

axis), the equation simplifies to

is not the angle of (X(t),Y(t)) with the X-axis.

• Generic Model Families can be imported into Masses and used to create geometry. Complex masses may

require hundreds of constraints, so as with any family, nesting can greatly reduce the complexity of the

constraints in the Massing family.

• Typically use face based for ease of placement in the massing editor.

Create model lines, keep them visible, and constrain and flex them to your heart’s content.

This completed example is of two ellipses, which have identical major axes but different minor axes. This is called a

distended ellipse. Once these constraints are defined, you can flex to any size and not have to worry about

interactions between the 3D geometry and the 2D lines causing a break in the family.

30

AB327-4 Fuzzy Math Essentials for Revit Family Builders

• You can place these on reference planes, levels, or faces as needed

• You can constrain them by whatever reference planes you create in the Generic Model family

• Parameters can be linked to parameters in the Massing family just like any other nested family

Constraints in the example “surfboard” family:

void in the whole building mass, something we might vary

at the project level.

“Scale Factor” is a result of this particular massing

family sitting in the void created by the revolved ellipse

defined by those two parameters. Since it doesn’t sit at the mid-point necessarily it might need to be smaller or larger

by a consistent percentage, so this sets that percentage which we would also control at the project level.

We want to have a vertical band around the edge of the

final form, and this sets the height of that band.

Surfboard Minor Axis

This is a value determined by the percentage of the Orb

Ellipse Axis parameters above. Formula: Orb Ellipse

Minor Axis * Surfboard Ellipse Scale Factor

Surfboard Depth

This defines the vertical axis of this ellipsoid.

Surfboard Major Axis

This is a value determined by the percentage of the Orb

Ellipse Axis parameters above. Formula: Orb Ellipse

Major Axis * Surfboard Ellipse Scale Factor

Since Revit could not (cannot?) make this shape on its

own at the time we were working on this project, we had

to “fudge” it with the approximations below. We decided

to divide the ellipse into fourths, and loft the resultant

lines:

31

AB327-4 Fuzzy Math Essentials for Revit Family Builders

st

1 Ellipse Y Offset from Center – Determines the distance to the first fourth. Formula: (Surfboard Depth / 4) * 1

st

1 Ellipse Major Axis – This is attempting to calculate the X direction displacement along the ellipse profile based

on the Y direction displacement. There is a formula for that (and an app). Per our ellipse formulas, the equation to

the right defines the relationship of points along an ellipse to the major and minor axes, both of which we have

defined! But I am terrible at solving formulas and I need this solved for X.

So, relating that to our parameters, the

formula: sqrt(Surfboard Major Axis ^ 2 * (1 -

(1st Ellipse Y Offset from Center ^ 2) /

(Surfboard Depth ^ 2)))

st

1 Ellipse Minor Axis

Similarly, we need the “other” direction

calculated. This is a 3D form not a 2D one.

The same formula works fine with different

parameters mapped to y, a, and b

respectively. Formula: sqrt(Surfboard Minor

Axis ^ 2 * (1 - (1st Ellipse Y Offset from

Center ^ 2) / (Surfboard Depth ^ 2)))

nd

2 Ellipse Y Offset from Center

Determines the distance to the second

fourth. Formula: (Surfboard Depth / 4) * 2

nd

2 Ellipse Major Axis

Now, we can repeat the formulas from

nd

earlier, but we will use the 2 Fourth Y

st

Offset instead of the 1 Fourth Y Offset.

Formula: sqrt(Surfboard Major Axis ^ 2 * (1 -

(2nd Ellipse Y Offset from Center ^ 2) /

(Surfboard Depth ^ 2)))

nd

2 Ellipse Minor Axis

Formula: sqrt(Surfboard Minor Axis ^ 2 * (1 -

(2nd Ellipse Y Offset from Center ^ 2) /

(Surfboard Depth ^ 2)))

rd

3 Ellipse Y Offset from Center

Determines the distance to the third fourth.

Formula: (Surfboard Depth / 4) * 3

rd

3 Ellipse Major Axis

Formula: sqrt(Surfboard Major Axis ^ 2 * (1 - (3rd Ellipse Y Offset from Center ^ 2) / (Surfboard Depth ^ 2)))

rd

3 Ellipse Minor Axis

Formula: sqrt(Surfboard Minor Axis ^ 2 * (1 - (3rd Ellipse Y Offset from Center ^ 2) / (Surfboard Depth ^ 2)))

th

4 Ellipse Y Offset from Center

Determines the distance to the edge, however since forms can’t be lofted to points we have to get infinitesimally

close but not quite to the edge – this is the approximation I’m talking about. Formula: (Surfboard Depth / 4) * 4 -

.1mm Note, we won’t actually use the .1mm reduction when creating the form, it is so the last profile doesn’t break

from being 0” by 0”.

th

4 Ellipse Major Axis

Formula: sqrt(Surfboard Major Axis ^ 2 * (1 - (4th Ellipse Y Offset from Center ^ 2) / (Surfboard Depth ^ 2)))

th

4 Ellipse Minor Axis

Formula: sqrt(Surfboard Minor Axis ^ 2 * (1 - (4th Ellipse Y Offset from Center ^ 2) / (Surfboard Depth ^ 2)))

32

AB327-4 Fuzzy Math Essentials for Revit Family Builders

Once these are set up, we need to create reference planes and dimensional constraints to use these…

On these reference planes we can place the components defined earlier and then link them to the appropriate

parameters. Set your workplane for one of the reference planes first. Then, click the component button and select

the generic model line family you loaded in.

rd

Placed on the lower 3

fourth reference plane.

Now you need to constrain

it to the origin using the

existing reference planes

in the template.

Aligned one way, don’t forget to lock it. And the other (lock it).

33

AB327-4 Fuzzy Math Essentials for Revit Family Builders

Select the generic model family and in the properties palette you should see the parameters from the family. Click

the little button on the right to link to a parameter in the massing family.

rd

Repeat for the Minor Axis and Add Axis – both of these will be linked to the 3 Ellipse Minor Axis in my case.

The end result should be your ellipse on one plane. Now, make a bunch more on the others.

This image shows the series of elliptical model lines placed on reference planes and constrained. This is the

surfboard. Changing the height parameter in the host causes these to move…

34

AB327-4 Fuzzy Math Essentials for Revit Family Builders

1000mm to 3000mm resulted in

more of a football than a

surfboard.

GM Families

Just like creating forms from

model lines in the massing

environment, you pick the

families or the lines in the families

in the desired order and click

“Create Form”. In this case, it

doesn’t matter if you start at the

bottom or top…

top, ready to create form…

any other in the massing

environment.

Form completed.

model lines in the generic model

families move…

1000mm…

35

AB327-4 Fuzzy Math Essentials for Revit Family Builders

and join additional solids to it…

solid joined to it so that it has

a flat rim above the midpoint

of the ellipse.

From here, any of the

techniques mentioned

above can be used with this

mass to hide or manipulate

the geometry. This mass

can also be nested into

another mass and then

controlled there.

its home on the

building mass.

36

AB327-4 Fuzzy Math Essentials for Revit Family Builders

So, why all the trouble? Why make some crazy parametric mass? Here’s why. You can flex it into hundreds of

iterations and get feedback from Revit whether that is energy analysis or calculating building area for FAR

requirements. We did the latter on this project for months… As the size of the property changed, we had to

constantly tweak the building envelope to fall within FAR limitations. As I said earlier, this project had over 100

envelope changes, many of them in the last month of DDs. If we had to re-create the skin from scratch each time we

would have gone broke.

Here we have 18 different variations using the same mass, with slightly different parameter values. Many of these

versions meet the FAR requirement, so we were simultaneously judging both the building area requirements AND

aesthetics of the massing. The schedules show the area sums and area by level for each version of the mass. We

did over 200 versions in three days of charrette time before selecting a final scheme.

37

AB327-4 Fuzzy Math Essentials for Revit Family Builders

OCCUPANCY SCHEDULES

IBC 2006 has some intense occupancy requirements based on the type. Using conditional statements you

can create a series of occupancy schedules based on any code requirements and driven by room or area

schedules.

Key Schedules are needed to fill out a bunch of values consistently and accurately without a lot of error

prone user input.

Occupancy Key

Exiting Requirements

38

AB327-4 Fuzzy Math Essentials for Revit Family Builders

Plumbing Requirements

These are in the example files, so don’t worry about reading them…

Room Schedules are what we’re using, even though technically many of these requirements are based off the entire

floor area or even building use as a whole. We’ve found that using a room by room requirement usually increases

(inflates) the numbers above the level or building requirements, and we can always back-check with the total area

information in these schedules. We typically provide exiting and plumbing at better than code requirement levels so

this isn’t a problem for us.

Exiting Widths

Based on the key values and whether the room is sprinklered or not, we can use a calculated value to define the

stair and horizontal exiting requirements very easily!

Calculated Occupancy - if(Area Per Occupant = 0 SF, Seating Occupancy, ((Area / Area Per Occupant) + 0.49))

Stair - if(Sprinklered, Calculated Occupancy * Stair Exit Width Per Occupant Sprinklered, Calculated Occupancy *

Stair Exit Width Per Occupant Unsprinklered)

Horizontal - if(Sprinklered, Calculated Occupancy * Horizontal Exit Width Per Occupant Sprinklered, Calculated

Occupancy * Horizontal Exit Width Per Occupant Unsprinklered)

39

AB327-4 Fuzzy Math Essentials for Revit Family Builders

Plumbing Fixtures

This one is a little more complicated, with some nested conditional statements and some hard coded values.

Calculated Occupancy

if(Area Per Occupant = 0 SF, Seating Occupancy, ((Area / Area Per Occupant) + 0.49))

Male Water Closets

if(Male Water Closet Requirement 1 > 0, (if(Water Closet 1st Requirement Limit > 0, (if((Calculated Occupancy * 0.5)

> Water Closet 1st Requirement Limit, (((Calculated Occupancy * 0.5 - Water Closet 1st Requirement Limit) / Male

Water Closet Requirement 2) + (Water Closet 1st Requirement Limit / Male Water Closet Requirement 1)),

(Calculated Occupancy * 0.5) / Male Water Closet Requirement 1)), (Calculated Occupancy * 0.5) / Male Water

Closet Requirement 1)), Calculated Occupancy * 1)

Female Water Closets

if(Female Water Closet Requirement 1 > 0, (if(Water Closet 1st Requirement Limit > 0, (if((Calculated Occupancy *

0.5) > Water Closet 1st Requirement Limit, (((Calculated Occupancy * 0.5 - Water Closet 1st Requirement Limit) /

Female Water Closet Requirement 2) + (Water Closet 1st Requirement Limit / Female Water Closet Requirement

1)), (Calculated Occupancy * 0.5) / Female Water Closet Requirement 1)), (Calculated Occupancy * 0.5) / Female

Water Closet Requirement 1)), Calculated Occupancy * 1)

Male Lavatories

if(Male Lavatory Requirement > 0, (Calculated Occupancy * 0.5) / Male Lavatory Requirement, Calculated

Occupancy * 1)

Female Lavatories

if(Female Lavatory Requirement > 0, (Calculated Occupancy * 0.5) / Female Lavatory Requirement, Calculated

Occupancy * 1)

Drinking Fountains

if(Drinking Fountain Requirement > 0, Calculated Occupancy / Drinking Fountain Requirement, 0)

40

AB327-4 Fuzzy Math Essentials for Revit Family Builders

RESOURCES

BLOGS

USER GROUPS

REVIT HELP

41

AB327-4 Fuzzy Math Essentials for Revit Family Builders

WEBSITES

Wikipedia – www.wikipedia.com

to know about mathematical formulas

for geometry is on Wikipedia…

Mathworld - mathworld.wolfram.com/

Software collection and user input. Also, free and explanatory.

This has some additional advanced definitions that Wikipedia

sometimes lacks.

tell it what to solve for and you

don’t even have to do the

algebra. It does it all for you and

shows steps. If only I had this

back in the day for Differential

Equations…

42