{"action":"closed","number":382,"pull_request":{"url":"https://api.github.com/repos/CindyJS/CindyJS/pulls/382","id":74267977,"html_url":"https://github.com/CindyJS/CindyJS/pull/382","diff_url":"https://github.com/CindyJS/CindyJS/pull/382.diff","patch_url":"https://github.com/CindyJS/CindyJS/pull/382.patch","issue_url":"https://api.github.com/repos/CindyJS/CindyJS/issues/382","number":382,"state":"closed","locked":false,"title":"Implement conic by polar pairs and incident flats","user":{"login":"gagern","id":190759,"avatar_url":"https://avatars.githubusercontent.com/u/190759?v=3","gravatar_id":"","url":"https://api.github.com/users/gagern","html_url":"https://github.com/gagern","followers_url":"https://api.github.com/users/gagern/followers","following_url":"https://api.github.com/users/gagern/following{/other_user}","gists_url":"https://api.github.com/users/gagern/gists{/gist_id}","starred_url":"https://api.github.com/users/gagern/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gagern/subscriptions","organizations_url":"https://api.github.com/users/gagern/orgs","repos_url":"https://api.github.com/users/gagern/repos","events_url":"https://api.github.com/users/gagern/events{/privacy}","received_events_url":"https://api.github.com/users/gagern/received_events","type":"User","site_admin":false},"body":"Given (*A*, *a*, *B*, *b*, *C*), compute conic such that 1. (*A*, *a*) and (*B*, *b*) are pole-polar pairs and 2. *C* is incident with the conic. This is one of four algorithms requested by #320. I found a computation which avoids all removable singularities.\r\n\r\nIt would be easy to adapt this to the dual case of two pairs and one tangent line, but then I'd have a singularity if all three lines were concurrent. I'd like to investigate a bit closer whether that singularity can be avoided.\r\n\r\n### How this was found\r\n\r\nI'll also document how I found this, in case the approach is applicable to other algorithms.\r\n\r\nIf one assumes the entries of the desired symmetric matrix as variables, then the characterizing conditions are polynomial equations which are linear in these variables. The conditions are essentially “*C* lies on conic” (i.e. *C*⋅*M*⋅*C*=0, one equation), “*a* is polar of *A*” (i.e. *a*×(*M*⋅*A*)=0, three equations) and “*b* is polar of *B*”. The three equations from each of the latter constraints are linearily dependent; it suffices to take two each, and after removing singularities (i.e. eliminating common factors) the choice doesn't matter. So one obtains a 5×6 system of equations, and the 5×5 minors of it can serve as a solution. Remove gcd and that's the desired matrix.\r\n\r\nUsing the polynomials obtained from the approach just described, I could experiment in Cinderella and observe that moving *B* (or *b*) led to a family of conics (drawing traces helped) which all passed through a single point on the line *AC*. Since computing the *other* intersection (other than *C*) is a linear operation, the formula for that point could be computed and simplified to *D*=⟨*a*,*A*⟩⋅*C* − 2⟨*a*,*C*⟩⋅*A*. Using (*B*, *b*) in pace of (*A*, *a*) led to *E*. So at that point I had three (fairly simple) points known to lie on the conic in question.\r\n\r\nNext came the search for suitable simple matrices to combine. The choice that worked was the pairs (*AC*, *AE*), (*BC*, *BD*) and (*AC*, *BC*), each written as a column times row rank 1 matrix. I looked for a non-trivial linear combination where these three and the desired result would combine to zero. This led to six homogeneous equations (one for each matrix element not implied by symmetry) in four variables. Taking any three equations and using minors as above led to the required coefficients. And I was happy to notice that the coefficient of the desired matrix had degree zero, certifying the absence of removable singularities. The final formula was ⟨*A*,*b*⟩⋅*M*<sub>1</sub> + ⟨*B*,*a*⟩⋅*M*<sub>2</sub> − 2⟨*A*,*b*⟩⟨*B*,*a*⟩⋅*M*<sub>3</sub> where *M*<sub>1</sub> through *M*<sub>3</sub> are the rank-one matrices in the order given above.","created_at":"2016-06-17T16:15:01Z","updated_at":"2016-08-30T09:43:49Z","closed_at":"2016-08-30T09:43:49Z","merged_at":"2016-08-30T09:43:49Z","merge_commit_sha":"ddd434442fdbeab3c5eb6ad45fe90a8d66b43549","assignee":{"login":"kranich","id":7249754,"avatar_url":"https://avatars.githubusercontent.com/u/7249754?v=3","gravatar_id":"","url":"https://api.github.com/users/kranich","html_url":"https://github.com/kranich","followers_url":"https://api.github.com/users/kranich/followers","following_url":"https://api.github.com/users/kranich/following{/other_user}","gists_url":"https://api.github.com/users/kranich/gists{/gist_id}","starred_url":"https://api.github.com/users/kranich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kranich/subscriptions","organizations_url":"https://api.github.com/users/kranich/orgs","repos_url":"https://api.github.com/users/kranich/repos","events_url":"https://api.github.com/users/kranich/events{/privacy}","received_events_url":"https://api.github.com/users/kranich/received_events","type":"User","site_admin":false},"assignees":[{"login":"kranich","id":7249754,"avatar_url":"https://avatars.githubusercontent.com/u/7249754?v=3","gravatar_id":"","url":"https://api.github.com/users/kranich","html_url":"https://github.com/kranich","followers_url":"https://api.github.com/users/kranich/followers","following_url":"https://api.github.com/users/kranich/following{/other_user}","gists_url":"https://api.github.com/users/kranich/gists{/gist_id}","starred_url":"https://api.github.com/users/kranich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kranich/subscriptions","organizations_url":"https://api.github.com/users/kranich/orgs","repos_url":"https://api.github.com/users/kranich/repos","events_url":"https://api.github.com/users/kranich/events{/privacy}","received_events_url":"https://api.github.com/users/kranich/received_events","type":"User","site_admin":false},{"login":"strobelm","id":14185442,"avatar_url":"https://avatars.githubusercontent.com/u/14185442?v=3","gravatar_id":"","url":"https://api.github.com/users/strobelm","html_url":"https://github.com/strobelm","followers_url":"https://api.github.com/users/strobelm/followers","following_url":"https://api.github.com/users/strobelm/following{/other_user}","gists_url":"https://api.github.com/users/strobelm/gists{/gist_id}","starred_url":"https://api.github.com/users/strobelm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/strobelm/subscriptions","organizations_url":"https://api.github.com/users/strobelm/orgs","repos_url":"https://api.github.com/users/strobelm/repos","events_url":"https://api.github.com/users/strobelm/events{/privacy}","received_events_url":"https://api.github.com/users/strobelm/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/CindyJS/CindyJS/pulls/382/commits","review_comments_url":"https://api.github.com/repos/CindyJS/CindyJS/pulls/382/comments","review_comment_url":"https://api.github.com/repos/CindyJS/CindyJS/pulls/comments{/number}","comments_url":"https://api.github.com/repos/CindyJS/CindyJS/issues/382/comments","statuses_url":"https://api.github.com/repos/CindyJS/CindyJS/statuses/e1fc54316487ea7d1788e3bfa3d1e943c1bf4dbc","head":{"label":"gagern:conic2Pol1P","ref":"conic2Pol1P","sha":"e1fc54316487ea7d1788e3bfa3d1e943c1bf4dbc","user":{"login":"gagern","id":190759,"avatar_url":"https://avatars.githubusercontent.com/u/190759?v=3","gravatar_id":"","url":"https://api.github.com/users/gagern","html_url":"https://github.com/gagern","followers_url":"https://api.github.com/users/gagern/followers","following_url":"https://api.github.com/users/gagern/following{/other_user}","gists_url":"https://api.github.com/users/gagern/gists{/gist_id}","starred_url":"https://api.github.com/users/gagern/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gagern/subscriptions","organizations_url":"https://api.github.com/users/gagern/orgs","repos_url":"https://api.github.com/users/gagern/repos","events_url":"https://api.github.com/users/gagern/events{/privacy}","received_events_url":"https://api.github.com/users/gagern/received_events","type":"User","site_admin":false},"repo":{"id":42124777,"name":"CindyJS","full_name":"gagern/CindyJS","owner":{"login":"gagern","id":190759,"avatar_url":"https://avatars.githubusercontent.com/u/190759?v=3","gravatar_id":"","url":"https://api.github.com/users/gagern","html_url":"https://github.com/gagern","followers_url":"https://api.github.com/users/gagern/followers","following_url":"https://api.github.com/users/gagern/following{/other_user}","gists_url":"https://api.github.com/users/gagern/gists{/gist_id}","starred_url":"https://api.github.com/users/gagern/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gagern/subscriptions","organizations_url":"https://api.github.com/users/gagern/orgs","repos_url":"https://api.github.com/users/gagern/repos","events_url":"https://api.github.com/users/gagern/events{/privacy}","received_events_url":"https://api.github.com/users/gagern/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/gagern/CindyJS","description":"A JavaScript framework for interactive (mathematical) content","fork":true,"url":"https://api.github.com/repos/gagern/CindyJS","forks_url":"https://api.github.com/repos/gagern/CindyJS/forks","keys_url":"https://api.github.com/repos/gagern/CindyJS/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gagern/CindyJS/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gagern/CindyJS/teams","hooks_url":"https://api.github.com/repos/gagern/CindyJS/hooks","issue_events_url":"https://api.github.com/repos/gagern/CindyJS/issues/events{/number}","events_url":"https://api.github.com/repos/gagern/CindyJS/events","assignees_url":"https://api.github.com/repos/gagern/CindyJS/assignees{/user}","branches_url":"https://api.github.com/repos/gagern/CindyJS/branches{/branch}","tags_url":"https://api.github.com/repos/gagern/CindyJS/tags","blobs_url":"https://api.github.com/repos/gagern/CindyJS/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gagern/CindyJS/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gagern/CindyJS/git/refs{/sha}","trees_url":"https://api.github.com/repos/gagern/CindyJS/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gagern/CindyJS/statuses/{sha}","languages_url":"https://api.github.com/repos/gagern/CindyJS/languages","stargazers_url":"https://api.github.com/repos/gagern/CindyJS/stargazers","contributors_url":"https://api.github.com/repos/gagern/CindyJS/contributors","subscribers_url":"https://api.github.com/repos/gagern/CindyJS/subscribers","subscription_url":"https://api.github.com/repos/gagern/CindyJS/subscription","commits_url":"https://api.github.com/repos/gagern/CindyJS/commits{/sha}","git_commits_url":"https://api.github.com/repos/gagern/CindyJS/git/commits{/sha}","comments_url":"https://api.github.com/repos/gagern/CindyJS/comments{/number}","issue_comment_url":"https://api.github.com/repos/gagern/CindyJS/issues/comments{/number}","contents_url":"https://api.github.com/repos/gagern/CindyJS/contents/{+path}","compare_url":"https://api.github.com/repos/gagern/CindyJS/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gagern/CindyJS/merges","archive_url":"https://api.github.com/repos/gagern/CindyJS/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gagern/CindyJS/downloads","issues_url":"https://api.github.com/repos/gagern/CindyJS/issues{/number}","pulls_url":"https://api.github.com/repos/gagern/CindyJS/pulls{/number}","milestones_url":"https://api.github.com/repos/gagern/CindyJS/milestones{/number}","notifications_url":"https://api.github.com/repos/gagern/CindyJS/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gagern/CindyJS/labels{/name}","releases_url":"https://api.github.com/repos/gagern/CindyJS/releases{/id}","deployments_url":"https://api.github.com/repos/gagern/CindyJS/deployments","created_at":"2015-09-08T16:29:07Z","updated_at":"2016-01-21T18:10:16Z","pushed_at":"2016-08-29T12:54:12Z","git_url":"git://github.com/gagern/CindyJS.git","ssh_url":"git@github.com:gagern/CindyJS.git","clone_url":"https://github.com/gagern/CindyJS.git","svn_url":"https://github.com/gagern/CindyJS","homepage":null,"size":15622,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"CindyJS:master","ref":"master","sha":"892292c67fd476b35e2a4f7cea3a4c4617787379","user":{"login":"CindyJS","id":14181218,"avatar_url":"https://avatars.githubusercontent.com/u/14181218?v=3","gravatar_id":"","url":"https://api.github.com/users/CindyJS","html_url":"https://github.com/CindyJS","followers_url":"https://api.github.com/users/CindyJS/followers","following_url":"https://api.github.com/users/CindyJS/following{/other_user}","gists_url":"https://api.github.com/users/CindyJS/gists{/gist_id}","starred_url":"https://api.github.com/users/CindyJS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CindyJS/subscriptions","organizations_url":"https://api.github.com/users/CindyJS/orgs","repos_url":"https://api.github.com/users/CindyJS/repos","events_url":"https://api.github.com/users/CindyJS/events{/privacy}","received_events_url":"https://api.github.com/users/CindyJS/received_events","type":"Organization","site_admin":false},"repo":{"id":42122684,"name":"CindyJS","full_name":"CindyJS/CindyJS","owner":{"login":"CindyJS","id":14181218,"avatar_url":"https://avatars.githubusercontent.com/u/14181218?v=3","gravatar_id":"","url":"https://api.github.com/users/CindyJS","html_url":"https://github.com/CindyJS","followers_url":"https://api.github.com/users/CindyJS/followers","following_url":"https://api.github.com/users/CindyJS/following{/other_user}","gists_url":"https://api.github.com/users/CindyJS/gists{/gist_id}","starred_url":"https://api.github.com/users/CindyJS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CindyJS/subscriptions","organizations_url":"https://api.github.com/users/CindyJS/orgs","repos_url":"https://api.github.com/users/CindyJS/repos","events_url":"https://api.github.com/users/CindyJS/events{/privacy}","received_events_url":"https://api.github.com/users/CindyJS/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/CindyJS/CindyJS","description":"A JavaScript framework for interactive (mathematical) content","fork":false,"url":"https://api.github.com/repos/CindyJS/CindyJS","forks_url":"https://api.github.com/repos/CindyJS/CindyJS/forks","keys_url":"https://api.github.com/repos/CindyJS/CindyJS/keys{/key_id}","collaborators_url":"https://api.github.com/repos/CindyJS/CindyJS/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/CindyJS/CindyJS/teams","hooks_url":"https://api.github.com/repos/CindyJS/CindyJS/hooks","issue_events_url":"https://api.github.com/repos/CindyJS/CindyJS/issues/events{/number}","events_url":"https://api.github.com/repos/CindyJS/CindyJS/events","assignees_url":"https://api.github.com/repos/CindyJS/CindyJS/assignees{/user}","branches_url":"https://api.github.com/repos/CindyJS/CindyJS/branches{/branch}","tags_url":"https://api.github.com/repos/CindyJS/CindyJS/tags","blobs_url":"https://api.github.com/repos/CindyJS/CindyJS/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/CindyJS/CindyJS/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/CindyJS/CindyJS/git/refs{/sha}","trees_url":"https://api.github.com/repos/CindyJS/CindyJS/git/trees{/sha}","statuses_url":"https://api.github.com/repos/CindyJS/CindyJS/statuses/{sha}","languages_url":"https://api.github.com/repos/CindyJS/CindyJS/languages","stargazers_url":"https://api.github.com/repos/CindyJS/CindyJS/stargazers","contributors_url":"https://api.github.com/repos/CindyJS/CindyJS/contributors","subscribers_url":"https://api.github.com/repos/CindyJS/CindyJS/subscribers","subscription_url":"https://api.github.com/repos/CindyJS/CindyJS/subscription","commits_url":"https://api.github.com/repos/CindyJS/CindyJS/commits{/sha}","git_commits_url":"https://api.github.com/repos/CindyJS/CindyJS/git/commits{/sha}","comments_url":"https://api.github.com/repos/CindyJS/CindyJS/comments{/number}","issue_comment_url":"https://api.github.com/repos/CindyJS/CindyJS/issues/comments{/number}","contents_url":"https://api.github.com/repos/CindyJS/CindyJS/contents/{+path}","compare_url":"https://api.github.com/repos/CindyJS/CindyJS/compare/{base}...{head}","merges_url":"https://api.github.com/repos/CindyJS/CindyJS/merges","archive_url":"https://api.github.com/repos/CindyJS/CindyJS/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/CindyJS/CindyJS/downloads","issues_url":"https://api.github.com/repos/CindyJS/CindyJS/issues{/number}","pulls_url":"https://api.github.com/repos/CindyJS/CindyJS/pulls{/number}","milestones_url":"https://api.github.com/repos/CindyJS/CindyJS/milestones{/number}","notifications_url":"https://api.github.com/repos/CindyJS/CindyJS/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/CindyJS/CindyJS/labels{/name}","releases_url":"https://api.github.com/repos/CindyJS/CindyJS/releases{/id}","deployments_url":"https://api.github.com/repos/CindyJS/CindyJS/deployments","created_at":"2015-09-08T15:51:32Z","updated_at":"2016-08-19T19:04:08Z","pushed_at":"2016-08-30T09:43:49Z","git_url":"git://github.com/CindyJS/CindyJS.git","ssh_url":"git@github.com:CindyJS/CindyJS.git","clone_url":"https://github.com/CindyJS/CindyJS.git","svn_url":"https://github.com/CindyJS/CindyJS","homepage":"http://cindyjs.org/","size":14681,"stargazers_count":14,"watchers_count":14,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":13,"mirror_url":null,"open_issues_count":102,"forks":13,"open_issues":102,"watchers":14,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/CindyJS/CindyJS/pulls/382"},"html":{"href":"https://github.com/CindyJS/CindyJS/pull/382"},"issue":{"href":"https://api.github.com/repos/CindyJS/CindyJS/issues/382"},"comments":{"href":"https://api.github.com/repos/CindyJS/CindyJS/issues/382/comments"},"review_comments":{"href":"https://api.github.com/repos/CindyJS/CindyJS/pulls/382/comments"},"review_comment":{"href":"https://api.github.com/repos/CindyJS/CindyJS/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/CindyJS/CindyJS/pulls/382/commits"},"statuses":{"href":"https://api.github.com/repos/CindyJS/CindyJS/statuses/e1fc54316487ea7d1788e3bfa3d1e943c1bf4dbc"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"strobelm","id":14185442,"avatar_url":"https://avatars.githubusercontent.com/u/14185442?v=3","gravatar_id":"","url":"https://api.github.com/users/strobelm","html_url":"https://github.com/strobelm","followers_url":"https://api.github.com/users/strobelm/followers","following_url":"https://api.github.com/users/strobelm/following{/other_user}","gists_url":"https://api.github.com/users/strobelm/gists{/gist_id}","starred_url":"https://api.github.com/users/strobelm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/strobelm/subscriptions","organizations_url":"https://api.github.com/users/strobelm/orgs","repos_url":"https://api.github.com/users/strobelm/repos","events_url":"https://api.github.com/users/strobelm/events{/privacy}","received_events_url":"https://api.github.com/users/strobelm/received_events","type":"User","site_admin":false},"comments":14,"review_comments":4,"commits":7,"additions":322,"deletions":2,"changed_files":6}}
{"actor":{"display_login":"strobelm"}}