ivan-z-petrovic / open-geo-prover

Automatically exported from code.google.com/p/open-geo-prover [author of the original repository on GoogleCode]
3 stars 2 forks source link

Missing touch point of tangent line and circle/conic #29

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
   Construction of tangent line from given point to given circle/conic should implicitly construct a touch point of that line and specified circle/conic. Currently this is not the case and therefore conversion of construction protocol to algebraic form may fail assuming this point is implicitly constructed.
   Workaround for this issue is to explicitly add construction of this touch point.

Example:
   These construction steps will fail to convert to polynomial form:

   <pfree label="$A$" />
   <pfree label="$H_{a}$" />
   <pfree label="$I$" />
   <ltwopts label ="$h_{a}$" point1="$A$" point2="$H_{a}$" />
   <lperp label ="$a$" point="$H_{a}$" baseline="$h_{a}$" />
   <pfoot label ="$P_{\_G14517}$" origpt="$I$" baseline="$a$" />
   <ccenterpt label ="$k(I,P_{a})$" center="$I$" point="$P_{\_G14517}$" />
   <ltangent label ="$c$" basept="$A$" pointset="$k(I,P_{a})$" />
   <ltangent label ="$b$" basept="$A$" pointset="$k(I,P_{a})$" />
   <pintersect label ="$B$" set1="$c$" set2="$a$" />
   <pintersect label ="$C$" set1="$a$" set2="$b$" />

   In these steps, there is tangent line c which by construction has only one point A, the point from which it has been constructed as a tangent to circle k. We assume it also has a touch point with circle k but that point currently is not implicitly constructed in OGP and that is an issue. Similarly, tangent line b has only one point A explicitly constructed. Then in last construction steps, points B and C are constructed as intersection points of line a and one of these tangents (b and c respectively). But, to transform these steps to polynomial form, each of two lines that intersect each other have to have at least 2 points, which is not the case since both b and c have just 1 point each.
   Workaround for this is to explicitly add touch point (in construction sample below they are marked with comments "add 1" and "add 2" before each of them):
   <pfree label="$A$" />
   <pfree label="$H_{a}$" />
   <pfree label="$I$" />
   <ltwopts label ="$h_{a}$" point1="$A$" point2="$H_{a}$" />
   <lperp label ="$a$" point="$H_{a}$" baseline="$h_{a}$" />
   <pfoot label ="$P_{\_G14517}$" origpt="$I$" baseline="$a$" />
   <ccenterpt label ="$k(I,P_{a})$" center="$I$" point="$P_{\_G14517}$" />
   <ltangent label ="$c$" basept="$A$" pointset="$k(I,P_{a})$" />
   <!-- add 1 -->
   <pintersect label ="$C1$" set1="$c$" set2="$k(I,P_{a})$" />
   <ltangent label ="$b$" basept="$A$" pointset="$k(I,P_{a})$" />
   <!-- add 2 -->
   <pintersect label ="$B1$" set1="$b$" set2="$k(I,P_{a})$" />
   <pintersect label ="$B$" set1="$c$" set2="$a$" />
   <pintersect label ="$C$" set1="$a$" set2="$b$" />

Original issue reported on code.google.com by ivan.petrovic.matf on 16 Jan 2015 at 7:51