I’ve always been fond of triangular numbers [1] and found the pattern they create beautiful.

.
. .
. . .
. . . .
. . . . .
. . . . . .
. . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . .

Embedded within are many a corporate logo:

Mitsubishi, Chase, Star of David, &c.

I wanted to find out the relationships between the dots and the possible lines drawn between them. For example.

If you have T_n, how many dots exist as a recurrence relation? How many lines can one draw between the dots for T_n?

o
/ \ (T_2 -> n_2 = 3)
o - o

number of dots:

d_i = d_{i-1} + i

number of lines:

n_i = n_{i-1} + 3 * (i – 1)

I wrote some of it up in CLISP to check it out:

;; calculates numer of edges in triangular graph

(defun nlines (i)

(let ((prev (- i 1)))

(if (eq i 0)

0

(+ (* 3 prev) (nlines prev)))))

;; returns number of nodes in graph

(defun ndots (i)

(if (eq i 0)

0

(+ (ndots (- i 1)) i)))

Now what if we looked at the triangular numbers with respect to a triangular array like Pascal’s Triangle? [2]

That is, how many operations need to take place in order to calculate the entire triangle?

; calcs number of operations for triangular arrays based on n

; nops = 6, i = 3

; .

; / \

; . . (nops 3) == 6

; / \ / \

; . . .

;

(defun nops (i)

(if (eq i 0)

0

(let ((prev (- i 1)))

(+ (nops prev) (* 2 prev)))))

I brute-forced the limit by just putting large numbers in and found out that the ratio between the number of dots and lines approaches 1/3 as i approaches infinity and the number of dots to the number of operations (in a triangular array) approaches 1/2 as i approaches infinity.

\lim_{i\to\infty} \frac{ndots_I}{nlines_i} = \frac{1}{3}
\lim_{i\to\infty} \frac{ndots_I}{nops_i} = \frac{1}{2}

**Sources:**

http://en.wikipedia.org/wiki/Triangular_number

http://en.wikipedia.org/wiki/Pascal’s_triangle