我有一个2d点列表,它是闭合均匀立方B样条的控制顶点(Dx).我假设一条简单的曲线(非自相交,所有控制点都不同).
我试图找到曲线所包围的区域:

如果我计算结点(Px),我可以将曲线视为多边形; 那么我"只是"需要在实际曲线和连接结点的直线之间找到每个分段的剩余三角形区域.
据我所知,Bspline的形状(因此区域)在旋转和平移下是不变的 - 所以对于每个段,我可以找到一个平移,将t = 0结放在原点,旋转放置t = 1结在+ x轴上:

我可以通过插入点和重新分组来找到曲线的等式:
P(t) = (
(t**3)*(-Dm1 + 3*D0 - 3*D1 + D2)
+ (t**2)*(3*Dm1 - 6*D0 + 3*D1)
+ t*(-3*Dm1 + 3*D1)
+ (Dm1 + 4*D0 + D1)
) / 6.
Run Code Online (Sandbox Code Playgroud)
但我正在试图将它整合在一起 - 我可以做到
1
/
| Py(t) dt
/
t=0
Run Code Online (Sandbox Code Playgroud)
但这不会给我区域.我想我需要的是
Px(t=1)
/
| Py(t) (dPx(t) / dt) dt
/
x = Px(t=0)
Run Code Online (Sandbox Code Playgroud)
但在我走得更远之前,我真的很想知道:
这是正确的面积计算吗?理想情况下,分析解决方案将成为我的一天!
一旦找到这个区域,如何判断是否需要从基础多边形中添加或减去它(第一个图中的红色区域与绿色区域相比)?
是否有任何Python模块可以为我做这个计算?Numpy有一些评估立方Bsplines的方法,但没有一种方法可以用来处理区域.
有更简单的方法吗?我正在考虑可能在一堆点上评估P(t) - 类似于t = numpy.arange(0.0, 1.0, 0.05)- …
给出一个字符串如
"2*(i+j) <= 100"
Run Code Online (Sandbox Code Playgroud)
我想生成相应的lambda函数,
fn = lambda i,j: 2*(i+j) <= 100
Run Code Online (Sandbox Code Playgroud)
我可以这样做eval,但我正在寻找一种不那么邪恶的方法.
我已经找到
import ast
f = ast.Lambda('i,j', '2*(i+j) <= 100')
Run Code Online (Sandbox Code Playgroud)
但我还没弄清楚如何执行结果!
理想情况下,我想自动拉出参数列表('i','j') - 现在,我只是使用re.findall('\ w +'),但我希望能够正确使用现有的功能,cos而不是将它们视为"关键字".
我在看是否有用于处理复杂数学集的Python库(使用数学集合构建器表示法构建)?并试图弄清楚如何最好地将set-builder符号解析为lambdas以提供给约束求解器.
我基本上希望ast.literal_eval也可以识别变量.
理想情况下,鉴于i >= 20我想回来((lambda x: x >= 20), ['i']),然后我可以直接提供给constraint.
我对Scipy的衍生功能有疑问.我昨晚用它并得到了一些奇怪的答案.我今天早上再次尝试了一些简单的功能,得到了一些正确的答案和一些错误.这是我的测试:
In [1]: def poly1(x):
...: return x**2
In [3]: derivative(poly1, 0)
Out[3]: 0.0
In [4]: def poly2(x):
...: return (x-3)**2
In [6]: derivative(poly2, 3)
Out[6]: 0.0
In [8]: def sin1(x):
...: return sin(x)
In [14]: derivative(sin1, pi/2)
Out[14]: 5.5511151231257827e-17
In [15]: def poly3(x):
....: return 3*x**4 + 2*x**3 - 10*x**2 + 15*x - 2
In [19]: derivative(poly3, -2)
Out[19]: -39.0
In [20]: derivative(poly3, 2)
Out[20]: 121.0
In [22]: derivative(poly3, 0)
Out[22]: 17.0
Run Code Online (Sandbox Code Playgroud)
我用手检查了poly3的值,并且-2 = 17,2 = 95,0 = 15.所以我使用的函数是错误的,或者函数是否有问题.谢谢 …
我有一个关联数组,即
$primes = array(
2=>2,
3=>3,
5=>5,
7=>7,
11=>11,
13=>13,
17=>17,
// ...etc
);
Run Code Online (Sandbox Code Playgroud)
然后我做
// seek to first prime greater than 10000
reset($primes);
while(next($primes) < 10000) {}
prev($primes);
// iterate until target found
while($p = next($primes)) {
$res = doSomeCalculationsOn($p);
if( IsPrime($res) )
return $p;
}
Run Code Online (Sandbox Code Playgroud)
问题是 IsPrime 还会遍历 $primes 数组,
function IsPrime($num) {
global $primesto, $primes, $lastprime;
if ($primesto >= $num)
// using the assoc array lets me do this as a lookup
return isset($primes[$num]);
$root = (int) …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的python文件
import urllib2
try:
data = urllib2.urlopen('http:....').read()
except urllib2.HTTPError, e:
print "HTTP error: %d" % e.code
except urllib2.URLError, e:
print "Network error: %s" % e.reason.args[1]
print data1
Run Code Online (Sandbox Code Playgroud)
输出看起来像这样
>>>
15.95
>>>
Run Code Online (Sandbox Code Playgroud)
我需要对data1(或任何替代变量)执行一些操作,这样当我打印data1(或新变量)时,输出没有额外的行.换句话说,我希望它看起来像这样:
>>>
15.95
>>>
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒我对python相对较新.我一直在用\ r进行调整,似乎无法让它工作.
使用Python v2,我有以下代码:
print ("Total of the sale is: ${:,.2f}".format(TotalAmount))
Run Code Online (Sandbox Code Playgroud)
这是一个名为"TotalAmount"的字符串,并将其格式化为如下所示:$ 100.00,即:货币值,无论数字是多少.
有没有办法将格式化的输出写入字符串?
谢谢你的帮助.
我可以使用布尔值作为列表索引:
isTrue = True
print ('No','Yes')[isTrue] -> 'Yes'
Run Code Online (Sandbox Code Playgroud)
但如果我定义一个类,
class YeaOrNay(object):
def __init__(self, val):
self.val = bool(val)
def __nonzero__(self):
return self.val
def __int__(self):
return int(self.val)
def __str__(self):
return ('Nay','Yea')[self.val]
Run Code Online (Sandbox Code Playgroud)
并尝试以相同的方式使用它:
isTrue = YeaOrNay(True)
print ('No','Yes')[isTrue]
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
TypeError: tuple indices must be integers, not YeaOrNay
Run Code Online (Sandbox Code Playgroud)
我可以解决它,
print ('No','Yes')[int(isTrue)] -> 'Yes'
Run Code Online (Sandbox Code Playgroud)
但是我真的想知道是否有一些魔法类方法可以添加到YeaOrNay中以使其"正常工作".
基本上,该函数应该提供列表中列表的平均值.例:
lst = [[46, 27, 68], [26, 65, 80], [98, 56, 35], [98, 65, 0]]
average(lst)
>>> [47.0, 57.0, 63.0, 54.33333333333333]
Run Code Online (Sandbox Code Playgroud)
我的代码:
def average(l):
for i in range(len(l)):
for j in range(len(l[0])):
l[i] / l[j]
return l
Run Code Online (Sandbox Code Playgroud)
我的编码显示一个错误标志,上面写着"TypeError:/ support'和'list'"不支持的操作数类型.我不知道我做错了什么.
这是我的代码:
for i in tuples:
if i[0] == "U_shape":
pieces.append(U_shape(i[1], boardLength, i[2])
if i[0] == "I_shape":
pieces.append(I_shape(i[1], i[2])
if i[0] == "L_shape":
pieces.append(L_shape(i[1], boardLength, i[2])
if i[0] == "T_shape":
pieces.append(T_shape(i[1], boardLength, i[2])
if i[0] == "X_shape":
pieces.append(X_shape(i[1], boardLength, i[2])
Run Code Online (Sandbox Code Playgroud)
这是错误:
if i[0] == "I_shape":
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud) 所以我是100%的新编程,虽然我对大多数事情都是一个非常快速的学习者,但我需要帮助.
我想在Python上使用多个列表找到所有可能的组合.我知道它有一个intertool,但我老实说甚至不知道从哪里开始,如何使用它甚至如何输入我的数据.
我正在尝试做的一个基本示例:
Flavors Sizes Toppings Syrups
========== ======= ============= ==============
Chocolate Small Sprinkles Hot fudge
Vanilla Medium Gummy bears Caramel
Strawberry Large Oreo Strawberry
Coffee Cookie dough White chocolate
Snickers etc.
Brownies
etc.
Run Code Online (Sandbox Code Playgroud)
对于口味和大小来说,只有一个选择,但让我们说糖浆我让他们选择三种选择,而对于浇头我也让他们选择三种.我想找到所有组合.
这很难吗?我需要什么样的代码以及如何输入我的变量?
谢谢.非常感激.
Ps- python可以采用多少组合?普通macbook pro的CPU需要多少钱?