• No results found

My early experimentation [173], restricted to trihedral objects, distinguished between based moves as described in Section 10.3, aimed at completing the vertex-edge framework, and face-based moves, aimed at adding a complete face at a time to the partial object. The conclusion reached there was that, although vertex-based moves are more generally reliable, there are some classes of drawing which cannot be reconstructed using these moves, so a single mechanism should be used which is capable of handling all useful types of move. This recommendation applies equally well to the more general non-trihedral domain, and is adopted here (despite the problems it creates for move arbitration, described in Section 10.7). Several use-ful move types have been identified, and are described in this section. A figure of merit is associated with each move; the numerical value depends on how the move is generated (see Section 10.6), and use of these figures or merit is described in Section 10.7.

After acceptance and execution of a move, the topology is reassessed. For ex-ample, at any potentially-incomplete vertex with the same number of edges and faces, if each edge is adjacent to two existing faces, the vertex is now complete and its underlying type is known unambiguously.

10.5.1 Creation of a New Vertex

As the aim is to reconstruct the vertex-edge framework of the object, the most obvious move towards completion is to add a new vertex and sufficient edges to link it to two or three existing incomplete vertices, as described in Section 10.3. Adding a new vertex and one edge to link it to one existing incomplete vertex is not a move towards completion and is not used.

Assuming that the number of incomplete vertices is proportional to the problem size, there will be O(n2) such moves available where two edges are to be added and O(n3) such moves available where three edges are to be added, so there is a good case to be made for not using the latter except in special circumstances such as when the framework can be completed in a single move.

Addition of a vertex and two edges can be subdivided into three variants, de-pending on whether (and how many) occluding T -junctions are involved. In the basic case, a new vertex is created, and two edges are added to link it to two in-complete vertices (not necessarily L-vertices, in the general case). Alternatively, one of the edges may be one terminating at an occluding T -junction; this is extended to the location of the new vertex, which replaces the T -junction, and a single new edge is added to link the new vertex to an existing incomplete vertex. In the case where both edges terminate at occluding T -junctions, the new vertex replaces both T -junctions, both existing edges are extended, and no new edge is added. (Vertex-plus-3-edge moves would require four variants—this is a further practical incentive to avoid using them.)

Whenever a new hidden vertex is hypothesised, a prediction is made concerning its location (as with z-coordinates of visible vertices, this is a provisional estimate; if the hypothesis is accepted, the provisional vertex location may be used in assessing the merit of subsequent hypotheses; it will also be used as a starting-point for the geometric fitting methods described in Chapter 11). Since it is found that some hypotheses are better than others at predicting vertex locations accurately, this prediction has its own figure of merit. For trustworthy hypotheses, this may be equal to the figure of merit of the hypothesis as a whole; for hypotheses such as mirror chains, which are good at predicting topology but poor at geometry, it may be considerably lower. Whenever equivalent hypotheses are merged (see Section 10.7),

the predicted locations are also merged taking account of this latter figure of merit.

When a hypothesis is accepted, any new vertices created are placed in the location corresponding to the prediction.

As will be seen in Section 10.6, it is sometimes the case that a vertex-plus-2-edge move is produced by a hypothesis which requires this new topology in order to complete a face; this being so, it is simplest to create the face too at this point.

RIBALD only implements this idea for quadrilateral faces.

10.5.2 Creation of a New Edge

Creation of a single new edge linking two incomplete vertices is also obviously a useful move towards completing the vertex/edge framework. There will be O(n2) such moves available.

As with moves creating a new vertex, there are three variants of the move creating a new edge, depending on the involvement of occluding T -junctions. In the basic case, a single new edge is added, linking two incomplete vertices. Where an existing edge terminates at an occluding T -junction, the T -junction is removed and the edge is replaced by one linking the originating vertex with an incomplete vertex. Where two existing edges terminate at occluding T -junctions, both T -junctions and both edges are removed and replaced by a single edge linking both originating vertices.

Again, as with moves creating a new edge, moves creating a single edge can be produced by a hypothesis which requires this edge in order to complete a face, and it is simplest to create the face too at this point. RIBALD only implements this idea for quadrilateral faces.

10.5.3 Creation of a New Face

As noted in Chapter 2.14, adding face loops to a complete vertex/edge framework is straightforward, reliable and quick, so in making a case for deferring all face creation until the vertex/edge framework is complete it can be pointed out that creating these using the low-order polynomial algorithm described there is preferable to creating them using the much higher-order general topological reconstruction algorithm. However, there will be situations where it is obvious that a face should be created from a particular loop of vertices or edges, and it is possible that creating