Introduction

Goniometry is an important aspect of archaeological and zooarchaeological analysis. The primary tool for studying angles on objects, such as bone fragments or lithics, is the pocket, contact goniometer, in essence a metal protractor with a rotating arm. The contact goniometer was originally designed in the 1780s to measure the angles on crystals (Burchard 1998) and first appeared in archaeology when Barnes (1939) used the instrument to differentiate anthropogenically produced stone tools from naturally-occurring conchoidally fractured rocks.

Lithic analysts have been measuring angles on stone tools since Barnes (1939) to address a number of questions including but not limited to tool function (e.g., Gould et al. 1971; Wilkins et al. 2017; Wilmsen 1968), retouch intensity (e.g., Kuhn 1990), and technological and behavioral variability (e.g., Dibble 1997; Nigst 2012; Režek et al. 2018; Scerri et al. 2016; Tostevin 2003). Taphonomic applications began when Capaldo and Blumenschine (1994) used the goniometer to distinguish bones broken by carnivores from those broken by hominins. They extrapolated directly from lithic methods using the goniometer to measure the internal platform angle on models of bone flakes created by taking impressions of notches and associated flake scars on experimentally broken bone. In 2006, Alcántara-García et al. (2006) introduced a method for identifying actors of breakage by using the goniometer to measure fracture angles—meaning the angle of transition from the periosteal surface to the fracture surface—on long bone shaft fragments. Prior to this, fracture angles were assessed by eye and categorized as oblique, right, or both, as a means of distinguishing green breaks from dry breaks (Villa and Mahieu 1991).

Using a contact goniometer in the analysis of fragmentary faunal assemblages is gaining traction because it permits researchers to collect seemingly more reliable, quantitative data, and opens the possibility for other avenues of analysis to address questions related to hominin and carnivore interactions at important paleoanthropological sites (Coil et al. 2017; De Juana and Dominguez-Rodrigo 2011; Domínguez-Rodrigo and Barba 2006; Moclán et al. 2019; Moclán et al. 2020; Pickering et al. 2005; Pickering and Egeland 2006). However, the reliability of the contact goniometer and the full range of possibilities for goniometry in faunal analysis has not been fully explored. Furthermore, the principles of goniometry are the same whether applied to bone fragments or stone tools and, within lithics, the contact goniometer’s reliability has come under question and alternative methods have been proposed (Dibble and Bernard 1980; Morales et al. 2015). The limitations imposed on the contact goniometer due to its physical interaction with the target object prevents a more rigorous exploration of the potential for goniometry in archaeological inquiries. A more flexible and precise tool is required.

Here, we introduce a new method for taking angle measurements, called the virtual goniometer. Though this new method assumes that 3D models are readily available for use and does not account for the time and expense of acquiring the models, scanning methods are rapidly becoming more efficient and cost-effective (Adamopoulos et al. 2021; Das et al.2017; Maté-González et al. 2017; Porter et al. 2016a, 2016b; Sapirstein and Murray 2017). Being able to scan a larger number of samples allows researchers within archaeology to expand the possibilities for research by developing digital tools that can extract data from 3D models, such as the virtual goniometer (Archer et al. 2015; Archer et al. 2016; Valletta et al. 2020).

The virtual goniometer can effectively measure angles across the range of values (acute to obtuse) which is not the case for extant physical tools. For example, the steep exterior platform angles (EPA) on lithics are better measured with a contact goniometer than with the caliper-goniometer (Dibble and Bernard 1980) because the steep apex angle makes the set distance between the points of the caliper and the bar too short for consistent measurement whereas the arms of the contact goniometer can capture more of the dorsal surface for a meaningful EPA as it would be visible to the knapper. On the other hand, very acute angles of cutting edges cannot be measured with contact goniometers and are better measured with the caliper-goniometer (Key and Lycett 2015). The virtual goniometer can cover both ranges of edge values at the same time, and that is within one artifact class.

Due to how the virtual goniometer measures angles, it can be used to measure 3D models of any object and can be applied across archaeological contexts and materials, thus extending the use of 3D models beyond digital preservation and creating opportunities for new avenues of research within anthropology. The virtual goniometer is an enabling technology that allows researchers to control how measurements are taken which is key to creating protocols that extract anthropologically useful information and can be easily replicated in independent studies. With these future studies in mind, we have implemented the virtual goniometer as a plug-in in the open source mesh processing software packages Meshlab and Blender, making the method widely available to researchers in the field.

Materials and methods

We compared the manual and virtual goniometers for computing fracture angles on a sample of bone fragments consisting of 537 breaks taken from 86 appendicular long bone shaft fragments (≥ 2 cm maximum dimension) randomly chosen from a collection of experimentally broken Cervus canadensis nelsoni (Rocky Mountain elk) and Odocoileus virginianus (white-tailed deer) limb bones. Fragments were scanned using a medical CT scanner at the University of Minnesota’s Center for Magnetic Resonance Research (CMRR) (slice thickness: 0.6, reconstruction interval: 0.6 mm, KV: 80, MA:28, rotation time: 0.05 sec, pitch: 0.8, algorithm: bone window, convolution kernel: B60f sharp) and then surfaced using MATLAB. The break surfaces on each fragment were manually subdivided into separate break planes (Gifford-Gonzalez 1989; Haynes 1983; Pickering et al. 2005). All breaks were measured, and we did not impose a minimum break length requirement. We measured the fracture angle—which is defined as the angle of transition between the periosteal surface and break surface—on each break face of each fragment (Alcántara-García et al. 2006; Capaldo and Blumenschine 1994; Villa and Mahieu 1991). Following the method established by Alcántara-García et al. (2006) and further described by Pickering et al. (2005), we chose to measure at the center along the break length.

Each break was measured using both a contact goniometer (labeled “man”) and the virtual goniometer using the Meshlab plug-in. Two methods were employed using the virtual goniometer. We refer to these methods as the click-and-drag method (“labeled drag”) and the xyz method (labeled “xyz”). We provide a brief overview of the two virtual goniometer methods here. A more detailed description can be found in the following section “3 3.” The fragments were first measured using the drag method, whereby the user inputs the 3D model into Meshlab or Blender (in this case Meshlab) and, using the mouse, clicks the location on the fracture edge where the measurement is to be taken. The user drags the mouse to select a region of the surface mesh surrounding the selected location, which we call a patch, to be used in the angle calculation (see Fig. 1). After the first round of drag angle measurements, denoted 𝜃drag, screen shots were taken of all the colorized models to create a 2D map of the measurements (see Fig. 2). This served as a visual guide for subsequent drag angle measurements, which we denote by φdrag and ψdrag and the three manual angle measurements, 𝜃man,φman,ψman, taken using the contact goniometer.

Fig. 1
figure 1

Angle measurement

Fig. 2
figure 2

Example of the 2D map

For each measurement taken using the virtual goniometer, data are output into an automatically generated .csv file, including the radius of the circular patch used for the measurement and the xyz-coordinates of the center of the patch. These data can be input directly into Meshlab (or Blender) as an alternative to interfacing directly with the 3D mesh using the mouse. (See “3 3” for a detailed description.) For the xyz method, we replicated the first set of drag measurements. Thus, the xyz method was only executed twice, so 𝜃xyz = 𝜃drag. The values for the radius and location (i.e., xyz-coordinates) of 𝜃drag were input into the plug-in for the xyz method to produce two further angle measurements φxyz, ψxyz).

In total, the same person (KYW) measured the angle of each break eight times (3 manual, 3 drag, and 2 xyz) thereby allowing us to test for intra-observer error. Following the results of the intra-observer test, it was deemed not necessary to run inter-observer tests for reasons which will be discussed in the results section. We tested for accuracy and precision in all methods, and demonstrate the ease of replicability when using the virtual goniometer. Accuracy is the difference between the true angle and the measured angle. Precision is the consistency of repeated measurements. Using additional data automatically provided by the two virtual methods, we analyzed the degree to which the location of the measurement, the distance from the edge, and the number of mesh points used impact how the angle measurement varies.

How the virtual goniometer works

The first step in the process is to scan the object of interest to produce a meshed surface. In most of our work, the mesh consists of a large number of triangles that approximate the bounding surface of the solid object. The common vertices of the triangles will be referred to as mesh points. Alternatively, the scanned surface could just be represented by an unordered “point cloud” consisting of mesh points without specification of the associated triangles. Typically the number of mesh points (triangles) on our scans ranges from 20,250 to 288,029.

In order to implement our virtual goniometer angle measurements, in addition to the mesh points representing the surface, we also require a unit outward normal at each mesh point, meaning a vector of length one that points exterior to the object and is normal—meaning perpendicular—to the tangent plane of the surface at its position. If the surface is a triangulated mesh, one can readily compute the normal vector to each triangle, and then average the normal vectors over nearby triangles to determine the normal at a given mesh point. In the case of a point cloud, one can employ local Principal Component Analysis (PCA) or other convenient methods (Bishop 2006) to compute the normal. With the mesh points and their normals in hand, we are ready to apply the virtual goniometer to compute angles at selected points on the surface.

The first ingredient of each angle measurement is the specificationFootnote 1 of one mesh point on the surface. The location is assumed to be on, or at least close to, a break edge or interface where an angle measurement has meaning. Choosing a location far away from an edge can lead to spurious angle measurements that are of no use to the studies for which the virtual goniometer is designed. In our implementation, the mesh point specification can be done in two ways: in the first, which we call the click-and-drag method, the user clicks on the displayed surface mesh in Meshlab to choose the point; alternatively, in the xyz method, the user enters the xyz-coordinates directly. The second method is particularly useful when reproducing or re-evaluating measurements since it avoids any inherent uncertainty in users clicking on different points each time.

The second ingredient is a small section of the surface, referred to as a patch, that is more or less centered on the chosen mesh point. Consequently, one needs to specify the size or radiusr > 0 of the patch. When using the click-and-drag method, the user clicks the desired location, and then drags the cursor to select the radius to be used. While dragging, the software interactively colors the patch to enable the user to see how large or small it will be, and once the cursor is released, the patch is chosen for the angle measurement. Alternatively, the user can input a specified radius. In more detail, once the radius r > 0 has been specified, the patch consists of all surface mesh points that are within a distance r of the specified point. In our Meshlab implementation, the distance is measured along the surface itself, known as geodesic distance. In Blender, distance is simply the standard Euclidean distance in the ambient three-dimensional space. The differences between the two distance measurements only slightly affect the specification of the patch, and produce very little difference between the resulting angle measurements.

The heart of our goniometer algorithm is to separate or cluster the mesh points in the patch into two subsets. (The complete mathematical details can be found in the next section “The math behind the virtual goniometer”; here, we give a simplified description of the underlying ideas.) Each of these subsets should contain the mesh points that lie on one of the sides of the break edge that is assumed to be passing through (or near) the specified center point of the patch. The clustering algorithm we employ primarily relies on the surface normals at each mesh point in the patch. For example, suppose the surface has the form of a crystal and consists of two flat planes intersecting along a line, which is the edge. Then, all the points on one side of the edge would have a common normal direction, while all the points on the other side would have a different common normal direction, and hence the normal directions serve to cluster the points lying on the two sides of the edge. More generally, one seeks to cluster the normals for the patch points into two classes, based on how close they are to each other. The mesh points in the patch whose normal is in the first class are then deemed to lie on one side of the break edge, while those in the second class lie on the other side. Our algorithm is based on the random one-dimensional projection clustering methods introduced in Han and Boutin (2014) and Yellamraju and Boutin (2018), and consists of projecting the normals in a certain intrinsic direction—the binormal direction that is tangent to the surface and perpendicular to the edge—and then splitting the resulting one-dimensional projected normal data into the two classes, which can be easily and quickly done. This relatively simple algorithm is fast, works very well in practice, and outperforms or is close to the performance level of much more sophisticated clustering algorithms.

However, the clustering based entirely on normals described in the previous paragraph can be significantly improved by taking into account the distances between mesh points, keeping in mind that points lying on one side of a break edge should mostly be closer to each other than to those on the opposite side. Thus, the full clustering algorithm uses both the normal data and the interpoint distance data. There is a tuning parameterλ that weighs the relative importance of these two data components, and the user can, if desired, alter its value if the initial clustering and resulting angle measurement is suboptimal.

Once the clustering algorithm is completed—which happens almost instantaneously—the selected patch is color-coded into two contrasting colors showing the individual clusters representing the two sides of the break curve. See Fig. 5 below for a sketch of such a bicolored surface patch. The colors rotate through a pallet list of pairs of contrasting colors; see Fig. 3 for examples of the resulting visual output in Meshlab.

Fig. 3
figure 3

Examples of the Virtual Goniometer on Different Materials

The algorithm finally computes the break angle by approximating each of the two mesh point clusters by a two-dimensional plane, using standard methods based on Principal Component Analysis (PCA). Thus, on either side of the break edge, the object’s surface has been locally approximated by a plane. The angle between these two planes, computed by a standard trigonometric formula, is deemed to be the virtual goniometer angle measurement at the center of the patch.

Further measurements can be taken at or near the original location; see Fig. 3b. The user can also choose to advance to a new location at which point the colors change; see Fig. 3b and c. Numerical data for each measurement are automatically recorded in a .csv file. The plug-in documentation which provides detailed, step-by-step instructions is available at https://amaaze.umn.edu/software

The math behind the virtual goniometer

In this section, we describe the mathematical algorithms used to design the virtual goniometer. This section is for those interested in the mathematical details that make it possible to fully reproduce our work in independent research.

To describe the algorithm mathematically, we first note that all vectors are considered as column vectors. There are two key matrices that serve as the input to the algorithm: X will represent all the mesh points in the patch, while N will represent their corresponding outward unit normal vectors, while λ is the aforementioned tuning parameter. The virtual goniometer is summarized in Algorithm 1, whose output is the angle measurement 𝜃 in degrees, and a goodness of fit ε > 0.

More precisely, let n be the number of mesh points in the patch. We use to denote the column vector with n entries all equal to one, and ∥x∥ to denote the Euclidean norm of the vector x. Let X be the 3 × n matrix whose i th column is the vector of x,y,z coordinates of the i th mesh point in the selected patch. Let N be the 3 × n matrix whose i th column is the outward unit normal vector to the surface at the i th mesh point.

As noted in “How the virtual goniometer works,” the virtual goniometer algorithm uses both the normal vectors N and the mesh points X to segment the patch into two regions. The tuning parameter λ controls the tradeoff between how much to rely on the normals versus the mesh points. Setting λ = 0 results in clustering using only the normal vectors N. If the surface is noisy, this can give a poor segmentation, since some normal vectors could point in a similar direction even if they are on opposite sides of a break. Increasing λ encourages the segmentation to put points that are close together into the same region, and can help to improve the segmentation on noisy meshes. Figure 4 shows the effect of λ on the segmentation, and there are generally three instances, when it needs to be adjusted: Fig. 4a sharp curves in the ridge; Fig. 4b subtle ridges, usually associated with obtuse angles; and Fig. 4c rugose surfaces. In our implementation, we take λ = 2 as the default value of the tuning parameter and find that we only need to change this parameter for a small number of measurements. Moreover, the user can easily learn when and how to adjust it.

figure b
Fig. 4
figure 4

Examples of how the tuning parameter λ affects how the measurement is taken

Let us describe the individual steps in our algorithm in some detail. In step 3, one can use for \(\overline {{\mathbf x}}\) any reasonable notion of centroid of the patch X, and either the mean value of the coordinates or a geodesic centroid work well. In our implementation in Meshlab, we set \(\overline {{\mathbf x}}\) to be the mesh point selected by the user in the click-and-drag selection method or the point specified in the xyz method. In step 4, we use the geodesic radius of the patch for r, that is, the largest geodesic distance from \(\overline {{\mathbf x}}\) to any point in X as measured along the surface. It is also possible to use the Euclidean radius of the patch, as we do in the Blender implementation, and the only difference is a minor change in the effect of the tuning parameter λ. However, the algorithm is not overly sensitive to this effect.

The vector t produced in step 5 is to be interpreted as the tangent vector to the “break curve” that separates the two approximately planar regions on the surface. The vector n in step 6 is the averaged outward normal vector to the patch. Thus, in step 7, the vector b given by normalizing the cross product of the break curve tangent and the surface normal is perpendicular to both and hence can be interpreted as the unit binormal vector of the patch X, pointing across the break curve, i.e., a unit vector that is both tangent to the surface and normal to the break curve. The binormal vector b is used to quickly obtain the correct segmentation, as described below. See Fig. 5 for a depiction of the vectors t,b, and n when the surface is (approximately) planar on either side of the (approximately) straight break edge.

Fig. 5
figure 5

Depiction of a surface patch and the tangent, normal, and binormal vectors t,n,b in Algorithm 1. The vector t is tangent to the break curve, which is a line in this example, n is the average of the outward normals on both sides of the break edge, denoted Ni and Nj in the figure, and the binormal b is perpendicular to n and t, and hence points across the break edge. The basis for our segmentation algorithm is that the sign of the dot product bNi will indicate on which side of the break edge a particular meshpoint falls

Our clustering method used in step 9 to divide the surface into two classes was inspired by the random projection clustering methods of Han and Boutin (2014) and Yellamraju and Boutin (2018), which involve repeatedly randomly projecting the data to one dimension, and then using the function WithinSS described below to perform the clustering of the resulting one-dimensional projected data. Given one-dimensional data represented by

$${\mathbf p}=(p_{1},p_{2},\dots,p_{n}) \qquad \text{where} \qquad p_{1} \leq p_{2} \leq \> {\cdots} \> \leq p_{n},$$

this function computes a real number s for which the quantity

$$ f(s) = \sum\limits_{p_{i}\geq s}(p_{i}-c_{1})^{2} + \sum\limits_{p_{i}< s}(p_{i}-c_{2})^{2} $$

where

$$ c_{1} = \frac{\sum\limits_{p_{i}\geq s}p_{i}}{\sum\limits_{p_{i}\geq s} 1},\qquad c_{2} = \frac{\sum\limits_{p_{i}< s}p_{i}}{\sum\limits_{p_{i}< s} 1}. $$

is minimized. The value of s that minimizes f(s) gives the optimal clustering of the one-dimensional data \({{\mathbf p}}=(p_{1},\dots ,p_{n})\) into two groups {pis} and {pi < s}. Note that f(s) is constant on each interval pi < spi+ 1, and hence we can find the global minimizer of f simply by computing f(pi) for \(i=1,\dots ,n\), and choosing s = pi that gives the smallest value. (And hence there is also no need to actually sort the data points p.) This highlights the advantage of working with one-dimensional data; it is very simple and fast to compute optimal clusterings.

Step 8 in the virtual goniometer algorithm implements a one-dimensional projection of a λ weighted combination of the unit normals to the mesh points in the patch and the mesh points themselves, shifted by the centroid so as to center the patch at the origin. However, the direction of the projection b is not random but is very carefully chosen as the binormal of the patch. The random projection algorithm advocated in Han and Boutin (2014) also works very well in this application; however, it requires around 100 random projections to obtain reliable results and is thus significantly slower. We have also experimented with other clustering algorithms, such as the hyperspace clustering method of Zhang et al. (2010), which also gives very good results at the expense of longer computation times. Our method presented in Algorithm 1 is very efficient and is suitable for real-time computations in mesh processing software such as Meshlab.

The resulting pair of clusters

$$ \mathbf{X}_{-} = \mathbf{X}[\mathbf{p} < s] = \{\mathbf{X}_{i}\mid p_{i} < s\} $$

and

$$ \mathbf{X}_{+}= \mathbf{X}[\mathbf{p} \geq s] = \{\mathbf{X}_{i}\mid \mathbf{p}_{i} \geq s\} $$

contain the mesh points belonging to the two components of the surface patch on either side of the break curve. (However, we do not construct the actual break curve; nor do we require that the centroid or selected location \(\overline {{{\mathbf x}}}\) be thereon.) In steps 10 and 11, the PCA function returns each principal component, denoted v±, with the smallest variance and the corresponding eigenvalues ε±, which represents the mean squared error in the fitting. We also experimented with robust versions of PCA (see Lerman and Maunu (2018) for an overview), but did not find the results were any more consistent. Finally, in step 13, arccos is the inverse cosine function, measured in degrees, not radians, and we use the branch with values between 0 and 180 degrees.

Other computer-based methods for measuring angles

Recently, in the field of lithic analysis, efforts have shifted in a digital direction (Archer et al. 2016; Grosman et al. 2011; Grosman et al. 2014; Grosman et al. 2008; Valletta et al. 2020; Weiss 2020; Weiss et al. 2018). Archer et al. (2015) and Archer et al. (2016) developed an R package that calculates edge angles based on the thickness of the object at a fixed distance from the edge using basic trigonometry. Their method applies PCA to find the principal axes of the lithic, the first determining its long axis, the second its width, defined as the furthest extent of the object in that principal direction, and the third its thickness, defined as the distance between corresponding points on each biface. The angle at an edge point is then calculated using the isosceles triangle in the plane perpendicular to the edge, whose apex is the edge point and whose base equals the thickness at a specified distance from the edge point. As pointed out in the code description by Pop (2019), the function will not work if the plane intersects more than one edge. Therefore, the function depends on the object being of a particular shape, is sensitive to the location of the points where measurements are taken, and cannot be easily applied to other tool types or bone fragments which have break edges that are not similar to those found on lithics, such as spiral breaks. Because the angle calculation relies on only three points, it is highly sensitive to small topographical changes on the object. The virtual goniometer, however, works on completely general digitized solid objects and uses all the mesh points within the patch to define the angle of intersection between the two faces and is therefore not sensitive to small topographical deviations.

Valletta et al. (2020) developed an angle measurement procedure available in a stand-alone software program. This program uses 3D models and calculates a mean value of the angle measurements taken from a number of selected points along an edge (Valletta et al. 2020). They use a cylindrical area that encompasses the entire length of the ridge, or break edge, and average the data along that length to fit two planes on either side of the ridge. This is useful when the edges are straight and uniform. However, many lithic elements and bone fragments do not conform to this ideal.

These two methods were designed specifically for lithic analysis, particularly for blades and bifaces, and are restricted to objects of this general shape. On the other hand, the virtual goniometer can be used to measure angles on completely general digitized objects arising in a very broad range of applications.

Results

Summary statistics for all methods

Of the 537 breaks in our randomly selected sample of bone fragments, 500 (93.1%) could be measured manually using the contact goniometer, while the other 37 breaks could not be physically measured. For 34 of those breaks, one or both arms of the contact goniometer were blocked from contacting the break face or periosteal face. The 3 remaining breaks that could not be measured manually came from a fragment that suffered lab damage after being scanned. The 3D mesh constructed prior to the lab break made it possible to apply the virtual goniometer to these samples that were unavailable for manual measurements. When comparing the manual measurements to the click-and-drag and xyz methods, we only used the 500 breaks that could be measured by all three methods.

To test variability, we computed three angle measurements for each of the three methods, which we denote by 𝜃,φ,ψ and use subscripts man, drag, xyz to indicate which method is employed. When using the manual and drag method, the location of the measurement is selected by eye. For the xyz method, the user enters the x,y,z coordinates directly.

To assess how much each method varied, we calculated the intra-observer variability (IOV) for the three angle measurements (𝜃,φ,ψ) for each break under the three different methods. The IOV is the average of the absolute value of the differences between each of the three angle measurements, all taken at the same location:

$$ \begin{array}{@{}rcl@{}} IOV_{man} &=& \frac{|\theta_{man}-\varphi_{man}|+|\theta_{man}-\psi_{man}|+|\varphi_{man}-\psi_{man}|}3,\\ IOV_{drag} &=& \frac{|\theta_{drag}-\varphi_{drag}|+|\theta_{drag}-\psi_{drag}|+|\varphi_{drag}-\psi_{drag}|}3,\\ IOV_{xyz} &=& \frac{|\theta_{xyz}-\varphi_{xyz}|+|\theta_{xyz}-\psi_{xyz}|+|\varphi_{xyz}-\psi_{xyz}|}3. \end{array} $$

Ideally, there should be no variation, so that IOV = 0.

Table 1 shows summary statistics, such as the mean and median values, for the IOV for the three methods. The median for the manual IOV (4.67) is marginally better than the expected variation (5) described in Capaldo and Blumenschine (1994) and Draper et al. (2011) but the mean for the manual IOV (7.08) is over 2 higher than expected and the standard deviation (8.48) is high. All but seven of the manual IOVs are < 31. The remaining seven are > 50 and could be considered outliers to which the mean and standard deviation are sensitive. However, removing those seven IOVs would not sufficiently reduce these values because the median IOV for the drag method (2.28) and the standard deviation (3.34) are considerably smaller. The xyz method has a consistently smaller IOV compared to the other methods, with a median of 0.001, mean 0.006, and standard deviation 0.011.

Table 1 Summary statistics for angle IOV

Figure 6 shows histograms of the IOV for each method. We see that the IOVs for the manual and drag method are rather dispersed with a larger proportion of breaks characterized by larger errors, while the IOV for the xyz method is highly concentrated around very low variabilities. We point out to the reader that the scale of the histogram axes are different in each case. The much smaller range and limited dispersion suggests that the virtual goniometer, regardless of method, outperforms the contact goniometer and the xyz method is far more precise than both the click-and-drag and manual methods.

Fig. 6
figure 6

Histograms of angle IOV using all three methods (n = 500)

Confidence intervals

We calculated 95% and 99% confidence intervals, the results of which can be found in Table 2 and Fig. 7 (Weisberg 2005). Even with an increase in the confidence level to 99%, the difference is striking—indeed, we have to apply a magnification to observe the xyz-method’s confidence interval. The range for the manual method is 2.5 times larger than the click-and-drag method and between 760.5 and 772.9 times larger than the xyz method. The drag method is a little over 300 times larger than the xyz method. The small range IOV of the xyz method indicates the method is exceptionally precise, especially compared to the drag and manual methods.

Table 2 Confidence Intervals
Fig. 7
figure 7

Plot of the confidence intervals for the IOVs (all methods)

We ran Tukey’s HSD (honestly significant difference) test with confidence level alpha = 0.05 to assess the significance of the difference in means of the IOV scores for each method (Barnette and McLean 1998). Table 3 shows that the virtual goniometer’s drag method is 3.6 (± 0.8, 95% C.I.) more consistent than the contact goniometer and the virtual goniometer’s xyz method is 7.1 (± 0.8, 95% C.I.) more consistent than the contact goniometer (p = 0.001, in both cases). Furthermore, the xyz method is 3.4 (± 0.8, 95% C.I.) more consistent than the drag method. The HSD test rejected the null hypothesis that any of the mean IOV values are equal with statistical significance p < 0.001. These methods are not equally effective. It is clear that the xyz method is far superior to both the manual and the drag methods.

Table 3 Results of the Tukey HSD Test

Summary statistics for the IOV (virtual methods)

Since the center, radius, and mesh point data cannot be collected using the manual method, we compare the drag and xyz methods for the entire sample using calculations of the IOV for each variable. The IOV of the angle measurement for the click-and-drag method features numerous large values and has a standard deviation of 3.7, varying as much as 28.2 (see Fig. 8). The xyz method has a standard deviation of 0.01 with a maximum variation of 0.06. Most of the xyz IOVs fall below 0.02. It is clear that the variation in the angle IOV is the result of variation in the location (represented by the center of the patch), the patch’s radius, and the number of mesh points in the patch (see Table 4).

Fig. 8
figure 8

Histograms of angle IOV using all virtual methods (n = 537)

Table 4 Summary statistics for IOV

Table 4 gives summary statistics for the IOV for the drag and xyz methods based on IOVs for the angle measurement, the number of mesh points in the selected patch, the radius of the patch, and the center location of the patch.

Multiple regression

To better understand how changes in the location, the radius, and the number of points in the patch affect the angle measurement, we ran a multiple regression using a log transformation (Weisberg 2005).

We chose to log-transform the response variable, using the standard natural log, in order to make the data satisfy the assumption of normal error terms (see Fig. 9). On the original data, the residuals did not follow a normal distribution and were quite skewed (Fig. 9a), whereas for the log-transformed data, they follow a normal distribution (Fig. 9b). Though the residuals do not have an obvious pattern, the Cook’s distance plot shows that none of the datapoints is overly influencing the model (Fig. 10) (Cook 1977). None of the observations have high Cook’s values which is indicated by the absence of datapoints in the upper or lower right-hand region of the plot.

Fig. 9
figure 9

Q-Q plots of the residuals (n = 537)

Fig. 10
figure 10

Cook’s Plot (log-transformed)

The results of the multiple regression are presented in Table 5. The p-value of the model’s fit is significant (p = 2.242e-10) as are the p-values for each of the explanatory variables indicating that all three variables are influencing the angle IOV. In this model, the radius (estimate = 0.9997) has the biggest impact. The estimate for the mesh points (-0.0009) shows that this has the least impact. The data are highly scattered (R2 = 0.0872) so it would be difficult to predict the angle IOV based on this model. Nonetheless, it is clear that, when replicating measurements, changes in the location, the radius, and the number of mesh points can influence the angle measurement. Having a large number of mesh points within a consistently sized patch with a consistent location is the best method for achieving small IOVs which is why the xyz method is the best option for replication of measurements.

Table 5 Multiple regression results (n = 537)

Discussion

Although goniometry plays an increasingly important role in anthropology, as with all measurements made on field data and objects, their overall reliability and hence subsequent inferences depend on their accuracy, precision, and replicability. And all of this depends on being able to take the measurement in the first place.

The physicality of the goniometer

The primary issue with the contact goniometer is the physical interaction between the instrument and its target. The contact goniometer was originally designed to measure the angle between intersecting flat surfaces, such as are found on crystals, and is less well adapted to surfaces with curvature and other features, such as cylindrical long bones, or uneven surfaces that are found on bone and other archaeological materials. The positioning of the goniometer on the object depends on the user, who must ensure that each arm of the instrument lies flat against and perpendicular to the faces being measured. Curvature variations can make this placement challenging.

Because the surfaces are not flat, the angle value depends on the distance from the edge where the measurement is taken on both faces. Stopping 3 mm from the edge of an object or stopping 5 mm from the edge can result in a different angle value. When using the contact goniometer, the distance from the edge generally cannot be controlled. Due to variations in topography among break faces on bone fragments, the arm of the goniometer does not consistently make contact on the surface at the same distance from the edge. When the surface is concave, the goniometer will not rest against the concavity, and will reach across that expanse to the other side.

Conversely, a convex surface prevents the goniometer from reaching the other side of the break. In this case, measuring an angle that extends across the whole surface is not possible. When the surface is rugose, the goniometer will make contact with the highest point within its reach at that location. Such topographical variations on the surface of the break prevent the goniometer from connecting with most of the surface and it fails to capture a significant amount of intermediate information at a single location.

Furthermore, sometimes the goniometer simply cannot access the necessary location for taking the measurement. It might be blocked by adhering matrix or some other surface feature such as a protuberance on a bone fragment. This can also be a matter of scale in that the goniometer is too large relative to the size and shape of the bone fragment. While a tiny goniometer would, at least in principle, be able to measure smaller or hard-to-reach locations, in practice it would be difficult for the user to handle comfortably and accurately. In some instances, the arms are too long and are blocked by features on the bone fragment or the break on the opposite side. The latter happens when more than half of the circumference of the fragment is present or the angle of interest is acute and descends into the medullary cavity. When measuring notches, Capaldo and Blumenschine (1994) chose to take molds because the goniometer was unable to reach the notch surfaces. However, making molds is often not an option and can even damage the specimen.

One instance in which the virtual goniometer cannot measure a fracture angle is when a sharp natural curve on the bone fragment is close to the fracture edge. This is only an issue when the radius is large. Reducing the radius such that it captures more of the ridge and less of the natural curve rectifies the problem. A smaller radius might be better when measuring angles on bone fragments. Limiting the radius such that it is local to the transition but still sufficiently large to not be hampered by imaging artifacts could provide a more informative measure. As the radius increases in size, it captures changes in the topography. Though the topographical changes on the break surface may also be of interest as it pertains to examining bone fragments, this should remain separate from the angle of transition between faces.

Extremely sharp edges cannot be measured by a contact goniometer (Dibble and Bernard 1980), because the arms overlap, blocking the location where the specimen is supposed to fit. In some cases, a contact goniometer can only accurately measure angles above 40.

Issues arising from the physical interaction of the goniometer and the bone fragment were evident in 20.11% of the breaks in our sample. These breaks were categorized as concave, hinged, surface, edge, or other. If we were physically unable to measure the break, it was categorized as blocked or other (see Table 6). Of the flagged fragments, 108 were measured. Arguably, these measurements do not accurately capture the fracture angle and may not be useful for fracture edge analysis.

Table 6 Categorized and uncategorized breaks

As a result of all these physical constraints, measurements taken at an edge angle will be inconsistent (Dibble and Bernard 1980; Johnson et al. 2019), which calls into question the accuracy of any comparative studies. Another disadvantage of the contact goniometer is the amount of time required to take each manual angle measurement. As a result, its application to assemblages that number in the thousands can become impractical if not impossible to complete. Thus, time and physical constraints may make it impossible to capture sufficiently representative data for detailed and rigorous studies.

Precision

The ability to take a measurement does not ensure its appropriateness. Assuming the angle can be taken and is appropriate to take, it also needs to be precise enough that it is useful. When measuring platform angles of notch molds using the contact goniometer, Capaldo and Blumenschine (1994) expected measurements to vary up to 5, which may well not be precise enough. For example, Alcántara-García et al. (2006) state that, in general, carnivores produce fracture angles between 80 and 110, whereas fracture angles on bones broken by percussion will be < 80 and > 110, offering a 30 range for assigning carnivores as the actors responsible for breakage. If one chooses a more stringent approach where fracture angles between 85 and 95 (Pickering et al. 2005), generally labeled as dry breaks, are excluded, this diminishes the ranges for carnivores to 5 and 15. These are small windows for such a large error range. In fact, one of those ranges is equal to the expected error range. In a test that looked at the reliability of the contact goniometer when measuring knee angle in a medical context, Draper et al. (2011) noted that in order to remain within an error range of 5, the location of the measurement had to be within 2 mm of the actual center of the patella. Not only is this equal to the error range presented by Capaldo and Blumenschine, these results also highlight the importance of the location where the measurement is taken since, in the case of bone fragments, the angle values can vary across the width of the break as well as along the length of the break edge.

Similarly, problems with precision in angle measurements are also recognized in the analysis of other archaeological materials, such as lithic artifacts. A number of studies have been published criticizing the contact goniometer’s application in this field, beginning with Dibble and Bernard (1980)’s demonstration of the large inter-observer variation of 16.6 for angles between 25 and 75. Others, such as Andrefsky (1998, 89-92), Cochrane (2003), Dibble and Whittaker (1981), Gnaden and Holdaway (2000), and Odell (2012) have focused on the difficulties of standardizing the physical placement of the contact goniometer along different stone edges and surfaces, akin to our observations above. Regardless, however, because angles are known to be behaviorally significant for flake production (platform angles: Dibble 1997; Magnani et al. 2014; Režek et al. 2018; Scerri et al. 2016; Tostevin 2003) and lithic tool function (cutting edge angles: Key and Lycett 2015; Wilkins et al. 2017), lithic analysts have endeavored to surmount the precision problems in two ways. First, they typically apply different measurement tools to different angles. Specifically, the caliper-goniometer of Dibble and Bernard (1980) is applied to acute angles < 40 (suitable for cutting edge and retouch edge angles) while the contact goniometer is applied to platform angles which are harder to measure with the caliper-goniometer and which are consistently over the 40 threshold for where Dibble and Bernard’s data show the two devices to be equally reliable. Other analysts, however, do not specify this shift in tools between different angle ranges, reporting only the use of the contact goniometer for both types of edges (e.g., Pargeter and de la Peña 2017 and Wilkins et al. 2017). Others focus on intra-observer error by choosing to measure lithic angles three times and to use the mean of the observations if the latter are roughly similar to each other (e.g., Hovers, 2009, for interior platform angles).

The second way in which lithic analysts endeavor to control for inter-observer variation is to devote abundant time and effort in training analysts as part of a team, such that all members of the team have spent many hours in one-on-one instruction on how to use the contact goniometer on over 200 lithic artifacts, representing the range of possible problematic cases for the device. The best example of this approach is the team created by the late Harold Dibble, which resulted recently in the large, multi-authored study of over 18,000 artifacts from 81 assemblages spanning about 2 million years, measured by over a dozen analysts over many decades (Režek et al. 2018). Because all of the authors were trained by the same individual(s), one can have confidence that measurements were taken similarly and problematic pieces were not included in their angle data. Yet this approach has a significant limitation for a wider scientific application: non-team researchers cannot add to their data, even though it is freely available, without risking an unknown increase in inter-observer error. That being said, it is unknown what the actual inter-observer variation is in the Režek et al. (2018) teams’ data, although it is certainly better than the 16.6 reported by Dibble and Bernard (1980). Re-imagining their results, however, as the meta-analysis of data from 81 independent researchers working on one assemblage each (rather than a unified study), it would not be inappropriate to worry about the possible combination of the known 16.6 inter-observer variation from Dibble and Bernard (1980) and the intra-observer variation of 5 in edge angles demonstrated by the present study. When looking at their EPA median data (Figure 1, p. 629, Režek et al. 2018), most of which fall within a range of about 65 to 95, a possible error range of 16 would have a substantial impact on data distribution and subsequent interpretations. While this meta-analysis scenario is hypothetical, such studies are in fact the goal of open access data science and we raise the issue of precision to encourage researchers to be cognizant of how certain variables are measured and any subsequent comparability issues resulting from those methods. All of these examples, from faunal as well as lithic analysis, suggest that a simpler and demonstrably more replicable tool such as the virtual goniometer is preferable for future research across multiple artifact types.

Experimental replication

Determining an exact location for a measurement makes it easier to replicate. When measuring fracture angles on bone fragments, some researchers measure at the midpoint along the ridge (Coil et al. 2017; Dibble and Bernard 1980; Pickering et al. 2005) whereas others use the most extreme angle (Moclán et al. 2019). Capaldo and Blumenschine (1994) defines a midpoint, but it only applies to notches and cannot be extrapolated to all fracture edges because it depends on fea tures that are specific to notches, specifically inflection points.

Finding the midpoint on a break edge is less clear. The midpoint on a bone fracture edge as described by Pickering et al. (2005) and Coil et al. (2017) is likely the approximate midpoint as opposed to an exact midpoint. The break edge on each break face on a bone fragment can be viewed as a contour. Establishing the endpoints for the contour is the first challenge. Typically, the full length of the break face does not terminate at the same location that the ridge between the periosteal surface and break surface terminates. Once a decision is made as to where the endpoints of the contour will be located, then one can decide where to take the angle measurement. In regard to the midpoint, one could choose the midpoint of the Euclidean distance between the two end points of that contour or one could choose the midpoint of the full contour length. In either case, finding the exact midpoint on the physical object is challenging, if not impossible, and time consuming. For example, calipers could be used in the case of the Euclidean midpoint. However, this would require a consistent orientation of the specimen in relationship to the calipers. Finding the most extreme angle would require approximation as well unless one measures many angles along the edge in order to identify which one is the most extreme. This requires that the angle can be measured at all locations and the goniometer is not blocked by features on the specimen at any location. When using 3D models, specific points can be chosen as endpoints for the contour. The Euclidean distance or the contour length can be calculated and a midpoint can be consistently defined and extracted.

Whether choosing the most extreme measure or the midpoint, taking a measurement at a single location is anthropologically arbitrary. Bones are not limited to one instance of fragmentation. If the objective is to identify the first actor of breakage, then the extrema or midpoints will not be comparable among specimens if additional fragmentation takes place. An alternative approach that could provide a richer dataset would be to take multiple measurements along the edge of the break which can be done quickly using the virtual goniometer. In any case, experimental replication is efficient and simple using the virtual goniometer because it outputs the data required to precisely replicate each measurement.

Accuracy

The accuracy of the virtual goniometer depends on many non-algorithmic factors, including the resolution of the 3D model, the size of the object being analyzed, the area of interest on the object, the degree to which there are topographical changes on the surface, and the scale at which the object is to be analyzed. Thus, it is not possible or appropriate to recommend an optimal scan resolution that will work for all anthropological studies.

In order to explore how the resolution of the scan affects the accuracy of the angle measurement, we tested the virtual goniometer on synthetic meshes consisting of two planes intersecting at a known angle. We varied the mesh resolution and the angle, and subjected the virtual goniometer to extreme cases that are generally beyond the range one would use in practice (i.e., very low resolutions).

The vertices of the synthetic meshes were chosen as independent and uniformly distributed random variables, and the mesh was generated with a Delaunay triangulation (Cheng et al. 2012). The two intersecting planes are identical, with side length of 1 along the break edge and 0.5 perpendicular to the break edge. We generated synthetic meshes with angles ranging from 1 to 179 in increments of 10 with additional meshes at 1, 5, 175, and 179 angles. For each angle, we varied the number of points (i.e., the resolution) in the mesh from 50 up to 10,000 points, and we generated 30 synthetic meshes for each combination of angle and resolution. For each mesh, we used the virtual goniometer to measure the angle at the center of the break with a radius of r = 0.4, and segmentation tuning parameter λ = 0 (since the meshes do not have noise). Because this was an automated process, there is no graphical user interface and the tuning parameter cannot be adjusted for individual measurements to improve the segmentation between planes. Therefore, the segmentation is completely reliant on resolution and some level of variation is expected among measurements.

The number of points in the r = 0.4 radius patch ranged from 20 to 5,186 in the experiment, resulting in a sample of 15,702 synthetic meshes. We removed all observations where the number of points in the r = 0.4 radius patch was < 20. The virtual goniometer requires a sufficient number of points in order to produce meaningful results. Nevertheless, we find that the virtual goniometer performs well even at quite low resolutions; the results of our experiment are displayed in Fig 11. The acceptable threshold for variation in the measurement will depend on the context of the research.

Fig. 11
figure 11

Plot of the difference between the true and measured angles at different resolutions

Future research

The next logical step is to start using the tool to address specific anthropological questions. Though the virtual goniometer is a broadly applicable tool that can accurately and consistently measure angles, its usefulness within specific artifact classes—including but not limited to pottery, stone, metal, and glass—needs to be tested and offers areas for future research. Questions to explore include where and how to take measurements and appropriate scan resolutions for specific artifact types and research questions. To that end, we are currently exploring application of the virtual goniometer on lithic artifacts and continuing to test its utility for fracture angle analysis on bone fragments.

Conclusion

Scanning objects is becoming mainstream in anthropology and the virtual goniometer is a logical next step that is easy to integrate into research that uses 3D models.

The purpose of this project was to introduce the virtual goniometer and demonstrate its capabilities. We have demonstrated that the precision and accuracy of the virtual goniometer far surpasses the capabilities of the contact goniometer. Additionally, the virtual goniometer automatically extracts the segmentation parameter, a measure of the goodness of fit, the measurement location, the radius of the selected area, and the number of mesh points used in the calculation, none of which can be garnered by using the contact goniometer. By providing numerical metadata for the measurement and 3D visualizations, inter- and intra-observer discrepancies can be easily identified and measurements can be replicated with precision. The virtual goniometer provides flexibility that allows the user to adjust parameters and choose an approach that is dependable and useful. The virtual goniometer resolves the inherent limitations of the contact goniometer without limiting its application to specific edge morphologies or artifact classes, as with extant 3D angle measurement tools. Furthermore, it gives researchers a tangible and consistent way to discuss how best to employ goniometry to address questions in anthropology.