给定空间中的3个点(3D):A =(x1,y1,z1),B =(x2,y2,z2)C =(x3,y3,z3); 那么如何找到通过这三个点的圆(圆弧)的中心和半径,即找到圆方程?这里使用Python和Numpy是我的初始代码
import numpy as np
A = np.array([x1, y1, z1])
B = np.array([x2, y2, z2])
C = np.array([x3, y3, z3])
#Find vectors connecting the three points and the length of each vector
AB = B - A
BC = C - B
AC = C - A
# Triangle Lengths
a = np.linalg.norm(AB)
b = np.linalg.norm(BC)
c = np.linalg.norm(AC)
Run Code Online (Sandbox Code Playgroud)
根据Circumradius定义,可以使用以下方法找到半径:
R = (a * b * c) / np.sqrt(2.0 * a**2 * b**2 +
2.0 * …Run Code Online (Sandbox Code Playgroud) 我在3D空间中有一条曲线.我想在它上面使用一个保持形状的分段立方插值,类似于matlab中的pchip.我研究了scipy.interpolate中提供的函数,例如interp2d,但这些函数适用于某些曲线结构,而不适用于我所拥有的数据点.有什么想法怎么做?
以下是数据点:
x,y,z
0,0,0
0,0,98.43
0,0,196.85
0,0,295.28
0,0,393.7
0,0,492.13
0,0,590.55
0,0,656.17
0,0,688.98
0,0,787.4
0,0,885.83
0,0,984.25
0,0,1082.68
0,0,1181.1
0,0,1227.3
0,0,1279.53
0,0,1377.95
0,0,1476.38
0,0,1574.8
0,0,1673.23
0,0,1771.65
0,0,1870.08
0,0,1968.5
0,0,2066.93
0,0,2158.79
0,0,2165.35
0,0,2263.78
0,0,2362.2
0,0,2460.63
0,0,2559.06
0,0,2647.64
-0.016,0.014,2657.48
-1.926,1.744,2755.868
-7.014,6.351,2854.041
-15.274,13.83,2951.83
-26.685,24.163,3049.031
-41.231,37.333,3145.477
-58.879,53.314,3240.966
-79.6,72.076,3335.335
-103.351,93.581,3428.386
-130.09,117.793,3519.96
-159.761,144.66,3609.864
-192.315,174.136,3697.945
-227.682,206.16,3784.018
-254.441,230.39,3843.779
-265.686,240.572,3868.036
-304.369,275.598,3951.483
-343.055,310.627,4034.938
-358.167,324.311,4067.538
-381.737,345.653,4118.384
-420.424,380.683,4201.84
-459.106,415.708,4285.286
-497.793,450.738,4368.741
-505.543,457.756,4385.461
-509.077,460.955,4393.084
-536.475,485.764,4452.188
-575.162,520.793,4535.643
-613.844,555.819,4619.09
-624.393,565.371,4641.847
-652.22,591.897,4702.235
-689.427,631.754,4784.174
-725.343,675.459,4864.702
-759.909,722.939,4943.682
-793.051,774.087,5020.95
-809.609,801.943,5060.188
-820.151,820.202,5085.314
-824.889,828.407,5096.606
-830.696,838.466,5110.448
-846.896,867.72,5150.399
-855.384,883.717,5172.081
-884.958,939.456,5247.626
-914.53,995.188,5323.163
-944.104,1050.927,5398.708
-973.675,1106.659,5474.246
-1003.249,1162.398,5549.791
-1032.821,1218.13,5625.328
-1062.395,1273.869,5700.873 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用轮廓函数使用此函数绘制一些数据:
cmap = mpl.cm.jet
norm = mpl.colors.Normalize(vmin=min(zi), vmax=max(zi))
ax = plt.contourf(xi, yi, zi, N=20, norm=norm, cmap=cmap)
plt.colorbar(ax)
Run Code Online (Sandbox Code Playgroud)
我得到的颜色条是这样的:

但是,我想让颜色条更具渐变性,如下所示:

有可能拥有吗?我尝试将 N=50 添加到轮廓函数中,但没有帮助。
我有一个窗口,有多个表使用QTableWidget(PyQt).我使用鼠标右键单击创建了一个弹出菜单,它工作正常.但是,我需要根据单击鼠标右键时鼠标悬停在哪个表上创建不同的弹出菜单.我怎样才能让鼠标告诉我它在哪个桌面上空盘旋?
或者,换句话说,如何实现一个方法,以便根据鼠标位置设置特定的上下文菜单?
我正在使用Python和PyQt.
我的弹出菜单与此代码类似(PedroMorgan从Qt和上下文菜单中回答):
class Foo( QtGui.QWidget ):
def __init__(self):
QtGui.QWidget.__init__(self, None)
# Toolbar
toolbar = QtGui.QToolBar()
# Actions
self.actionAdd = toolbar.addAction("New", self.on_action_add)
self.actionEdit = toolbar.addAction("Edit", self.on_action_edit)
self.actionDelete = toolbar.addAction("Delete", self.on_action_delete)
# Tree
self.tree = QtGui.QTreeView()
self.tree.setContextMenuPolicy( Qt.CustomContextMenu )
self.connect(self.tree, QtCore.SIGNAL('customContextMenuRequested(const QPoint&)'), self.on_context_menu)
# Popup Menu
self.popMenu = QtGui.QMenu( self )
self.popMenu.addAction( self.actionEdit )
self.popMenu.addAction( self.actionDelete )
self.popMenu.addSeparator()
self.popMenu.addAction( self.actionAdd )
def on_context_menu(self, point):
self.popMenu.exec_( self.tree.mapToGlobal(point) )
Run Code Online (Sandbox Code Playgroud) PYQT4 是否可以更改 QTabWidget 选项卡的背景颜色?有一种方法可以更改文本的颜色,但不能更改选项卡的背景颜色。
我有一个带有多个选项卡的程序,我想为每个级别提供自己的背景颜色。请参阅所附示例。
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(661, 397)
self.verticalLayout = QtGui.QVBoxLayout(Dialog)
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
self.tabWidget = QtGui.QTabWidget(Dialog)
self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
self.tab = QtGui.QWidget()
self.tab.setObjectName(_fromUtf8("tab"))
self.verticalLayout_2 = QtGui.QVBoxLayout(self.tab)
self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
self.tabWidget_2 = QtGui.QTabWidget(self.tab)
self.tabWidget_2.setObjectName(_fromUtf8("tabWidget_2"))
self.tab_3 = QtGui.QWidget()
self.tab_3.setObjectName(_fromUtf8("tab_3"))
self.verticalLayout_3 = QtGui.QVBoxLayout(self.tab_3)
self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3"))
self.tabWidget_3 = QtGui.QTabWidget(self.tab_3)
self.tabWidget_3.setObjectName(_fromUtf8("tabWidget_3"))
self.tab_5 = QtGui.QWidget()
self.tab_5.setObjectName(_fromUtf8("tab_5"))
self.verticalLayout_4 = QtGui.QVBoxLayout(self.tab_5)
self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4"))
self.tabWidget_4 = QtGui.QTabWidget(self.tab_5)
self.tabWidget_4.setObjectName(_fromUtf8("tabWidget_4"))
self.tab_7 = QtGui.QWidget()
self.tab_7.setObjectName(_fromUtf8("tab_7"))
self.verticalLayout_5 = QtGui.QVBoxLayout(self.tab_7) …Run Code Online (Sandbox Code Playgroud) 我在Python Dictionary中看到一些不寻常的行为:
import numpy as np
td =[np.Inf, 2, 3]
a = {}
# First initialize contents of dictionary to a list of values
for k in range(10):
a[k] = td
#now I want to access the contents to modify them based on certain criteria
for k in range(10):
c = a[k]
c[0] = k
a[k] = c
Run Code Online (Sandbox Code Playgroud)
从这里我可以预期每个字典键值的列表中的每个第一项都会根据(c [0] = k)进行更改,但是,我最后得到的是字典的所有值都更新到最后k的值:如
{0: [9, 2, 3], 1: [9, 2, 3], 2: [9, 2, 3], 3: [9, 2, 3],
4: [9, …Run Code Online (Sandbox Code Playgroud) 我有一个在空间中最少有两个点的向量,例如:
A = np.array([-1452.18133319 3285.44737438 -7075.49516676])
B = np.array([-1452.20175668 3285.29632734 -7075.49110863])
Run Code Online (Sandbox Code Playgroud)
我想在沿着曲线的离散点处找到矢量的切线,gg是曲线的开始和结束.我知道如何在Matlab中做到这一点,但我想用Python做.这是Matlab中的代码:
A = [-1452.18133319 3285.44737438 -7075.49516676];
B = [-1452.20175668 3285.29632734 -7075.49110863];
points = [A; B];
distance = [0.; 0.1667];
pp = interp1(distance, points,'pchip','pp');
[breaks,coefs,l,k,d] = unmkpp(pp);
dpp = mkpp(breaks,repmat(k-1:-1:1,d*l,1).*coefs(:,1:k-1),d);
ntangent=zeros(length(distance),3);
for j=1:length(distance)
ntangent(j,:) = ppval(dpp, distance(j));
end
%The solution would be at beginning and end:
%ntangent =
% -0.1225 -0.9061 0.0243
% -0.1225 -0.9061 0.0243
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我尝试使用numpy和scipy使用多种方法找到解决方案,例如
tck, u= scipy.interpolate.splprep(data)
Run Code Online (Sandbox Code Playgroud)
但是没有一种方法能满足我的要求.
python ×7
numpy ×3
pyqt ×2
scipy ×2
colors ×1
dictionary ×1
geometry ×1
list ×1
matplotlib ×1
qt ×1
qtabbar ×1
qtabwidget ×1
vector ×1