我如何评估圆的交点体积和直线上方的面积。我也想申请。 - Python

How can I evaluate the intersection's volume of a circle and the area above a line. I also would like to apply it. - Python

这是在使用 Python。

我尝试post一张图片,但是失败了...所以可能很难理解。

圆内(圆心为(0, 0),半径为1)与直线(y = x)上方的交点称为黄色部分。

我想用随机数计算黄色部分的面积,没有for语句或while语句,但我不知道该怎么做。

另外,我也把它应用到3-D.That是,椭圆里面的一部分(2x^2+3y^2+z^2-4=0)和上面的一部分的交集平面(x+y+2z-1=0)。但这是一个额外的问题。如果我能在二维中做到这一点就很容易了。

我想计算我实验中的一些体积。我已经尝试了我的一些代码,但它们不起作用。 如果您能回答我的问题,我将不胜感激。

我码了什么↓

import numpy as np
size = 10000

if y - x > 0:
    x = np.random.uniform(-1, 1, size)
    y = np.random.uniform(-1, 1, size)
area = x**2 + y**2
print(len(area[area < 1])/size)

黄色部分的面积应该是这段代码所期望的。

好吧,要在没有 for 语句或 while 语句的情况下执行此操作意味着您必须使用 NumPy 向量功能。这是代码,它在单位圆内均匀采样,计算 y=x 行上方的点数并打印区域。

import numpy as np

N=100000 # number of trials

# sampling uniformly in the circle
angle  = 2.0 * np.pi * np.random.random(N)
radius = np.sqrt(np.random.random(N))

x = radius * np.cos(angle)
y = radius * np.sin(angle)

t = np.where(y > x)[0]

print(np.pi * len(t)/float(N))

它打印出 1.5705135834560735,大约是 π/2。

你在错误的地方设置了 y-x > 0 条件。

import numpy as np
size = 10000
# Generate random x and y in the square ((-1, -1) (1, 1))
x = np.random.uniform(-1, 1, size)
y = np.random.uniform(-1, 1, size)
area = x*x + y*y

# Move the y-x conditional into the boolean array.
print(len(area[np.logical_and(area < 1, (y-x)>0)])/size)
# The logical and of the points inside the circle and those where y>x.
0.3963

这为您提供了要计算的区域中点的比例。

正方形的面积 = 4。
圆和gt中的比例 y-x= 0 .3963
4*.3963 = 1.5852 足够接近预期的 pi/2。

一个想法是识别每个集合中的点。 np.where 对此有帮助:

size=10000
x,y = 2*np.random.rand(2,size)-1 # random points in a square
circle= np.where( x*x+y*y<=1)

xc,yc=x[circle],y[circle]  # points in circle

half_circle = np.where(yc<xc)

xh,yh= xc[half_circle],yc[half_circle]  # points in half circle

from pylab import scatter

scatter(x,y,c='red')
scatter(xc,yc,c='blue')
scatter(xh,yh,c='yellow',s=1)
print(len(xh)/size)
#0.39441