如何绘制具有散景和正确方向角的椭圆?

时间:2020-05-18 19:04:02

标签: python geometry bokeh ellipse

我想绘制一个基于两个焦点f1和f2以及第三个点的椭圆。但是由于某种原因,对于我计算出的给定角度,椭圆的方向无法正确显示。

我缺少基本的东西吗?为什么bokeh无法以给定的pi / 4角度使椭圆取向?

这是我的示例代码:

import numpy as np
from bokeh.io import output_notebook, show
from bokeh.plotting import figure
from bokeh.models import Range1d
output_notebook()

f1 = np.array([0,0])
f2 = np.array([3,3])
point = np.array([1,3])

tools = "hover, box_zoom, undo, crosshair"
p = figure(tools=tools)
p.circle(f1[0], f1[1], radius = 0.05, alpha=0.5)
p.circle(f2[0], f2[1], radius = 0.05, alpha=0.5)
p.circle(point[0], point[1], radius = 0.05, color='red')

center = (f2 - f1)/2 + f1
print(center)

angle = np.arctan2((f2 - f1)[1], (f2 - f1)[0])
print(np.rad2deg(angle))
# minor axis
a = (np.linalg.norm(f2-point) + np.linalg.norm(f1-point))/2
# major axis
c = np.linalg.norm((f2 - f1)/2)
# b = np.sqrt(a**2 - c**2)/2
b = 0.2

p.circle(center[0], center[1], radius = 0.05, color='orange')
p.ellipse(x=center[0], y=center[1], width=2*a, height=2*b, angle=angle, fill_color="yellow", fill_alpha = 0.4)
p.x_range = Range1d(-2, 4)
p.y_range = Range1d(-2, 4)
show(p)

enter image description here

2 个答案:

答案 0 :(得分:2)

这是一个尚未解决的非常棘手的问题:https://github.com/bokeh/bokeh/issues/7965

tl; dr:该角度基本上使用与数据范围比率不对应的屏幕像素比率。在您的特定情况下,它是工具栏和轴“挤压”主绘图区域。如果将它们删除,则该区域将是完美的正方形,并且角度将是正确的。

答案 1 :(得分:0)

我遇到了类似的问题,并通过更改轴范围来解决它。这没有任何意义,但对于这个例子,当像这样扩展 y_range 时,椭圆是对齐的:

from
p.y_range = Range1d(-2, 4)

to
p.y_range = Range1d(-2, 4.35)
相关问题