aspects

The harmonic scanner, his orbs and the midpoints

Purpose

Robert's aspect engine is a harmonic scanner. It walks the divisors of the circle from one to twelve, or sixteen, and tests every body pair against a window around each multiple of the base angle. A pair that matched under a smaller divisor is claimed and never tested again, so the classical aspect always wins over an exotic one. The same machinery, run three times with different offsets, finds the midpoint contacts.

Origin map

originalported asfile
asp0, asp10, asp1, asp11scan_aspectssrc/horcom/chart/aspects.*
a12aspscan_aspects_between
org, orbis_discr2, orbis_discr3public orb helpers, shared with the statistics engine
halbs1, halbs11, halbs111scan_midpoints
aspdisaspect_symbol
aspar, aspsenk, aspsenk1, aspwag, aspwag1, nam, klplanzbuild_aspektariumsrc/horcom/render/aspektarium.*
aspar2 with the trees of halbs111 and halbsamidpoint_trees, drawn by build_midpoint_treessrc/horcom/chart/aspects.*, src/horcom/render/midpoint_trees.*
orb, nasp&, orbe!, orbe(), or&()AspectSettingssrc/horcom/chart/aspects.hpp
a18stinternal slot walkersrc/horcom/chart/aspects.cpp

The orb system

The default window of a divisor is a thirtieth of its base angle scaled by the global ORB FACTOR, twelve degrees for the conjunction, six for the opposition, four for the trine. Each body carries a percentage weight, the pair takes the LARGER of the two weights, and a weight of zero silences a body entirely. His alternative mode, the equally probable aspects, swaps in a user table of orbs and restricts each divisor to its classical multiples, twelve keeps only 1, 5, 7 and 11, eight keeps the odd ones. His dialog explains the intent in his own words

...orbs are chosen that give about EQUAL probability to all aspects with divisor 1 to 12 ! ( 1930 to 2050 )
from the settings dialog of the equal probability mode

The comparison scan

a12asp compares two charts, the running sky over a radix or later two people, and it is stricter than the single scan. Divisors one to six with the fifth harmonic never scanned, the multiples with his skips so the square family tests ninety and two hundred seventy and the sixth only sixty and three hundred, the base orb pn over thirty regardless of the equal probability mode, and on the transit wheel the flat rule of one degree scaled by the radix body's weight. A near side guard keeps a pair from matching the same angle twice. His guards took a zero for an empty slot, so an exact aspect and every body at 0° Aries dropped out and a chart laid over itself lost all its conjunctions. The port asks the slot like the single scan, and the double wheel comparison lists exact aspects. The shell lists the hits under the transit view as running body, separation and radix body, the way his screen wrote T and R columns beside the wheel.

The Schiemenz counters

Two statistics ride inside the scanner, both introduced for the research correspondence his change log attributes to Schiemenz. The Triga counter joins conjunctions that share a body, consuming the shared ends so nothing counts twice. The grand trine counter searches triples of divisor three hits whose endpoints close a triangle, with a degeneracy guard against three bodies standing in one spot.

// Schiemenz Triga counter: // Schiemenz grand trine counter: // Schiemenz aspect counter built in 04.01.03
his section markers and the change log entry

Midpoints

Three passes, direct, square and the semi square family, test every body against the half sum of every pair, each with the midpoint's antipode, one degree of base orb. A shared cube of flags spans the passes so the square that also fits the semi square family counts once. The orb of a midpoint contact follows orbis_discr3, the larger weight of the pair sets it and the third body's weight only decides whether it takes part. His scans took a position of zero for an empty slot and a zero distance for no aspect, so a body at exactly 0° Aries, the fixed point typed as 0 Aries or a 90 degree dial position folding onto zero never aspected, and two bodies on the same degree never formed their conjunction. The port asks the slot whether it is filled and counts the exact conjunction. The midpoints of the ASPECTARIUM and the MIDPOINT GRAPHIC include the fixed point when one is set. A fourth pass over the 45 degree level opens on demand for the midpoint tree screen, the three counters stay with the classic passes.

The midpoint trees

The MIDPOINT GRAPHIC draws the trees of his aspar2, eleven in each of two bands and 22 a page. Every body gets a tree, the fixed point when it is set and the south node included, and the geocentric chart adds the cusps two, three, five and six as H2 to H6. Each tree shows its degree and sign on top, a trunk with nine branches and on each branch the pair whose midpoint falls on the point, lettered D, Q, H or V for the levels 360, 180, 90 and 45 degrees, found by the same halbs111 pass as the midpoint list, one shared flag cube per screen and the tree walked level by level. A tenth hit only frames the ninth branch like his box. The cusp trees weigh a normal 100 percent. His or&() slots 15 to 18 behind them were never reachable in the orb dialog, 15 doubled as the EXTRA PLANETS row and 16 to 18 stayed zero, so his program drew H3, H5 and H6 without a branch and gave H2 the weight of the extra bodies. Space, Enter or Page Down turn the page, ESC ends. After the last page the geocentric chart asks whether to sort by eight times the longitude folded to the circle, which lines up the planetary pictures, and the sorted pass prints that dial value under each tree, red when another point stands within the larger level eight orb of the two. The right mouse opens einzel_plan_wahl in its MIDPOINTS wording, the chosen bodies turn red or the others leave the pairs, the trees themselves always stand.

The counts of his halbs_zaehl_gr stand as a line under the trees, Number of midpoints : with the direct, square, semi square and quarter square hits, their sum, the base orb and the orb factor. His program popped the counter up over the screen once every tree stood, and under COMPACT EVALUATION after HOROSCOPE GRAPHIC too, to be clicked away or switched off with SUPPRESS this DISPLAY !. The rewrite keeps the numbers in view without the popup, and the COMPACT EVALUATION lists the midpoints beside the chart anyway.

The Aspectarium

aspar asks MAXIMUM divisor first, eight, twelve or sixteen, sixteen only outside the equal probability orbs, twelve preset, under his orb banner, and the choice holds for this sheet alone. Then build_aspektarium draws his sheet, the matrix of 26 by 20 cells with the sprites along the top and down the left, the whole block under the title line. Every matched pair shows its exact separation in the upper cell, degrees and minutes on two lines, with his hook under a main aspect and a tick under any other, and the name in the mirrored lower cell, the sprite of the main aspects and the named minors, divisor over rounded angle for everything else like his DEFAULT branch. The separations round to whole minutes, his minutes could round up to 60, the port carries them into the degree. A body at exactly 0° Aries takes its place in the matrix like any other, and the true Black Moon stands inverted like on the wheel. The hit count of every body stands on the hatched diagonal, the grid runs one column past the last body like his loop. On the right follow the divisor table with angle and orb, the orb factor, his legend, the name split at its first space and the date, under the matrix the planet weights with the percent after MC, the node weights kept in the heliocentric mode too, and, with extras, their weight and up to five of their sprites. Without extras and fixed point the aspect histogram of asphist sits in the empty corner, the grab of his bitmap leaving out its first heading, and the Munich Rhythm mode leaves that inset out. The matrix holds nineteen columns like his, so five extras fit beside MC. The Planet selection colours the chosen bodies red, and the right mouse opens einzel_plan_wahl and draws the sheet again. The naming runs through aspdis, ported as aspect_symbol, which folds the matched angle to the near side and names the family of the smallest divisor that holds it as an exact multiple. His aspdis divided the angle down with FIX and named five elevenths by the ninth, the port corrects that, see the list of known original bugs.

Verification

test_aspects.cpp runs synthetic charts through the scanner, the trine window, the conjunction across the zero wrap, the smaller divisor claiming a pair before a larger one can, the silent node pair, silent zero weight bodies, the orb factor scaling, the equal probability multiple filter, a chained conjunction for the Triga counter, a closed grand trine, midpoint hits in all three passes, the antipode rule and the cross pass duplicate guard. The aspdis pins cover every named angle, the multiples folding back onto their divisors and the four fractions his truncation misnamed.