続・円の交点を求めるプログラム
import math size(300, 300) background(0.3, 0.3, 0.3) nofill() stroke(1, 0.1, 0) def writeEn(posX,posY,R): x = -R + posX y = -R + posY oval(x, y,R*2,R*2) def circleCross(xc1, yc1, r1, xc2, yc2, r2): cross = [] l = math.sqrt(pow((xc2-xc1), 2) + pow((yc2-yc1), 2) ) s = math.atan2(xc2-xc1,yc2-yc1) c = ( pow(l,2) + pow(r1,2) - pow(r2,2))/(2*r1*l) a = math.acos(c) cross.append( xc1 + r1*math.cos(s+a) ) cross.append( yc1 + r1*math.sin(s+a) ) cross.append( xc2 + r1*math.cos(s-a) ) cross.append( yc2 + r1*math.sin(s-a) ) return cross c1 = [100,100,90] c2 = [200,100,80] writeEn(c1[0],c1[1],c1[2]) writeEn(c2[0],c2[1],c2[2]) p1= circleCross(c1[0],c1[1],c1[2], c2[0],c2[1],c2[2]) stroke(0.5, 0.1, 0) writeEn(p1[1],p1[0],10) writeEn(p1[3],p1[2],10)
完全に自分で解決した訳ではないが、三角関数使うと上手く行くぽい。
ついでに、可視化する為にNodeBoxでコーディングしている。