def getSunSize(self, p):
"""Get the size of the sun in screen pixels.
This is a hack: it renders the sun, then finds the contour
surrounding the sun and computes the center/radius of that.
"""
self.fbo.bind()
self.clear_background()
self.fbo.release()
dt, sun_alt, sun_az, moon_alt, moon_az, sun_r, moon_r, sep, parallactic_angle, lat, lon = p
sun_coords = horizontal_to_cartesian(deg(sun_alt), deg(sun_az))
sun_x, sun_y, sun_z = scale_vector(sun_coords, SUN_EARTH_DISTANCE)
self.fbo.bind()
self.draw_sun(sun_x, sun_y, sun_z)
glFlush()
self.fbo.release()
image = self.fbo.toImage()
# Find the contours of the sun in the image
contours = self.find_contours(image)
# Make a poly that fits the contour
poly = cv2.approxPolyDP( np.array(contours[0]), 3, True )
# Find the minimum enclosing circle of the polygon
c = cv2.minEnclosingCircle(poly)
self.fbo.bind()
self.clear_background()
self.fbo.release()
return c
评论列表
文章目录