我试图沿其轮廓提取脉冲的曲率(见下图).脉冲在长度和高度的网格上计算:使用有限差分在C++中实现的150 x 100个单元格.
我提取了所有具有相同值(轮廓/水平集)的点,并将它们标记为下图中的红色实线.其他颜色可以忽略不计.
然后我试图通过以下方法从这已经很嘈杂(由于网格离散化)轮廓线找到曲率:
(移动平均线已经应用)
1)通过切线的曲率
点P处的线的曲率由下式定义:
因此,曲率是P和N之间的角度增量的角度δ的石灰.由于我的点之间有一定的距离,我无法对石灰进行足够的近似,因此曲率计算不正确.我用圆圈测试它,它自然具有恒定的曲率.但我无法重现这一点(只有1位有效数字是正确的).
2)由arclength参数化的线的二阶导数
我计算了关于arclength的线的一阶导数,用移动平均线平滑,然后再次得到导数(二阶导数).但在这里我也只有1个有效数字正确.不幸的是,采用导数将已经固有的噪声倍增到更高的水平.
3)用圆圈局部近似线
由于圆半径的倒数是曲率,我使用以下方法:
到目前为止这是最好的(2位正确的有效数字),但我需要进一步改进.所以我的新想法如下:
我不想使用离散点处的值来确定曲率,而是想用三维样条曲面近似脉冲轮廓.然后我从中提取某个值的水平集,以获得平滑的点线,我可以从中找到一个很好的曲率.
到目前为止,我找不到可以生成这样的Bezier样条曲面的C++库.你能指点我吗?
您是否认为这种方法值得一试,或者我的曲率会失去太多精确度?
你知道其他任何方法吗?
非常友好的问候,Jan
编辑:似乎我不能以新用户的身份发布图片,所以我从我的问题中删除了所有这些图片,即使我觉得它们很重要,可以解释我的问题.有什么办法我还能给他们看吗?
edit2:好的,完成了:)
我正在使用matplotlib在同一个图上绘制多个曲面,我想只看到最顶层的曲面,就像matlab所示.
Matlab 3D视图:
Matlab顶视图:
Matplotlib 3D视图:
Matplotlib顶视图:
我怎样才能让Matplotlib显示类似于Matlab的结果,其中最顶层的类显示在顶部,而不是一个类优先于另一个?
我有一个功能r(x)
,我想围绕x
轴旋转,以获得我想要使用(着色)添加到现有绘图的旋转实体.plot_ly
add_surface
x
这是一个例子:
library(dplyr)
library(plotly)
# radius depends on x
r <- function(x) x^2
# interval of interest
int <- c(1, 3)
# number of points along the x-axis
nx <- 20
# number of points along the rotation
ntheta <- 36
# set x points and get corresponding radii
coords <- data_frame(x = seq(int[1], int[2], length.out = nx), r = r(x))
# for each x: rotate r to get y and …
Run Code Online (Sandbox Code Playgroud) 我正在学习pygame
并想要一个具有三种状态的按钮的图形:正常,悬停和按下.我有一个像这样的图像......
......我希望Surface
使用它的一部分得到一个新的.
我正在使用以下代码加载图像:
buttonStates = pygame.image.load(os.path.join('image','button.png'))
Run Code Online (Sandbox Code Playgroud)
如何仅使用该图形的一部分来制作新曲面?
我有一组接近表面的3d点.但是,每个点都会出现一些错误.此外,点集包含的点数远远多于表示底层表面所需的点数.
我正在寻找的是一种算法来创建一个新的(小得多)点集,表示一个简化,更平滑的表面版本(原谅没有比"简化,更平滑"更好的定义).底层表面不是数学表面,所以我不希望将数据集拟合到某些数学函数中.
问题:尝试导出patch
在MATLAB中使用命令渲染的多边形时fig2plotly
,最终输出缺少指定的面颜色.
也许演示会有所帮助.采用以下顶点和面来定义一个立方体(从MATLAB文档中取出):
vert = [0 0 0;1 0 0;1 1 0;0 1 0;0 0 1;1 0 1;1 1 1;0 1 1];
fac = [1 2 6 5;2 3 7 6;3 4 8 7;4 1 5 8;1 2 3 4;5 6 7 8];
Run Code Online (Sandbox Code Playgroud)
并使用patch命令渲染它,向面添加一些颜色信息:
patch('Vertices',vert,'Faces', fac, 'FaceVertexCData',hsv(8),'FaceColor','interp')
Run Code Online (Sandbox Code Playgroud)
并在3D中查看:
view(3)
axis vis3d
Run Code Online (Sandbox Code Playgroud)
这给出了一个很好的立方体,表面上有插值颜色值.
现在,如果我们尝试使用以下fig2plotly
命令将其导出到Plotly :
fig2plotly(gcf)
Run Code Online (Sandbox Code Playgroud)
它返回一个空的立方体(plotly链接):
换句话说,已捕获线信息,但不捕获面.即使我们试图保留MATLAB样式,我们仍然会丢失面部信息:
fig2plotly(gcf, 'strip', false)
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我正在寻找一个图书馆或一篇论文来描述如何确定一个三角形网格是否与另一个三角形网格相交.
有趣的是,我很空虚.如果有一些方法可以在CGAL中做到这一点,它就是在逃避我.
看起来它应该是可能的,因为三角形交叉是可能的,因为每个网格包含有限数量的三角形.但我认为必须有一种比明显的O(n*m)方法更好的方法,其中一个网格有n个三角形而另一个网格有m个三角形.
我想使用色彩图,线框和轮廓绘制表面matplotlib
.像这样的东西:
请注意,我不是在询问与xy平行的平面中的轮廓,而是在图像中是3D和白色的轮廓.
如果我采用天真的方式并绘制所有这些东西,我看不到轮廓(见下面的代码和图片).
import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
X, Y = np.mgrid[-1:1:30j, -1:1:30j]
Z = np.sin(np.pi*X)*np.sin(np.pi*Y)
ax.plot_surface(X, Y, Z, cmap="autumn_r", lw=0.5, rstride=1, cstride=1)
ax.contour(X, Y, Z, 10, lw=3, cmap="autumn_r", linestyles="solid", offset=-1)
ax.contour(X, Y, Z, 10, lw=3, colors="k", linestyles="solid")
plt.show()
Run Code Online (Sandbox Code Playgroud)
如果为表面刻面添加透明度,那么我可以看到轮廓,但它看起来非常混乱(请参阅下面的代码和图像)
import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
X, Y = …
Run Code Online (Sandbox Code Playgroud) 我在2D欧几里德空间中散布着一团点.我想计算连接云的最极端(=外围)点的多边形内的区域.换句话说,我想估计这个空间中云所覆盖的区域.R中有一个公式吗?非常感谢任何回应Julien
我正在尝试MediaRecorder
不使用Camera
实例而是使用Surface
视频源进行录制(是的,这是可能的,但事实证明它并不完美)-mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
我只写什么问题:
下一个代码仅适用于某些设备,并在最近的设备重新启动后在某些设备上临时工作或根本不起作用
如果它不起作用 okMediaRecorder.stop()
方法失败并出现下一个错误
E/MediaRecorder:停止失败:-1007 W/System.err:
java.lang.RuntimeException:停止失败。在
android.media.MediaRecorder.stop(本机方法)
录音机 mp4 文件太小(千字节),无法播放
测试设备:
适用于联想 P2、小米 A1
不适用于小米红米 5、索尼 Xperia、小米红米 4 Prime
您也可以阅读我的代码中的注释以更好地理解问题
new Thread(() -> {
MediaRecorder mediaRecorder = new MediaRecorder();
File file = new File(Environment.getExternalStorageDirectory()
+ File.separator + "test_media_recorder_surface_source.mp4");
if (file.exists()) {
file.delete();
}
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setOutputFile(file.getAbsolutePath());
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setVideoSize(1280, 720);
mediaRecorder.setCaptureRate(24);
try {
mediaRecorder.prepare();
int sleepTime = 1000 / 24;
Surface surface = mediaRecorder.getSurface();
mediaRecorder.start();
// record something (we can …
Run Code Online (Sandbox Code Playgroud) android surface android-canvas mediarecorder android-mediarecorder