小编Nad*_*der的帖子

在空间中给出三个点(3D)找到弧/圆方程

给定空间中的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)

python geometry numpy

8
推荐指数
1
解决办法
9580
查看次数

蟒蛇三维曲线的形状保持分段三次插值

我在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)

python numpy curve-fitting scipy

7
推荐指数
1
解决办法
6485
查看次数

matplotlib 颜色条平滑度

我正在尝试使用轮廓函数使用此函数绘制一些数据:

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 添加到轮廓函数中,但没有帮助。

python matplotlib

5
推荐指数
1
解决办法
5078
查看次数

PyQt中的多个上下文菜单基于鼠标位置

我有一个窗口,有多个表使用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)

python qt pyqt

4
推荐指数
1
解决办法
4715
查看次数

更改 QTabWidget 选项卡的背景颜色

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 pyqt colors qtabbar qtabwidget

2
推荐指数
1
解决办法
8639
查看次数

更改一个字典值会更改所有值

我在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)

python dictionary list

2
推荐指数
1
解决办法
3161
查看次数

找到离散数据点的切线向量

我有一个在空间中最少有两个点的向量,例如:

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 numpy vector scipy

0
推荐指数
1
解决办法
5889
查看次数