标签: surface

使用2d/3dsplines从嘈杂的数据点集中查找曲率?(C++)

我试图沿其轮廓提取脉冲的曲率(见下图).脉冲在长度和高度的网格上计算:使用有限差分在C++中实现的150 x 100个单元格.

具有不同曲率的脉冲轮廓

我提取了所有具有相同值(轮廓/水平集)的点,并将它们标记为下图中的红色实线.其他颜色可以忽略不计.

红线=具有相同值的点的数据集

然后我试图通过以下方法从这已经很嘈杂(由于网格离散化)轮廓线找到曲率:

(移动平均线已经应用)

1)通过切线的曲率
两点P和N的曲率逼近

点P处的线的曲率由下式定义:

2点的切线=一点处的曲率

因此,曲率是P和N之间的角度增量的角度δ的石灰.由于我的点之间有一定的距离,我无法对石灰进行足够的近似,因此曲率计算不正确.我用圆圈测试它,它自然具有恒定的曲率.但我无法重现这一点(只有1位有效数字是正确的).

2)由arclength参数化的线的二阶导数

我计算了关于arclength的线的一阶导数,用移动平均线平滑,然后再次得到导数(二阶导数).但在这里我也只有1个有效数字正确.不幸的是,采用导数将已经固有的噪声倍增到更高的水平.

3)用圆圈局部近似线

由于圆半径的倒数是曲率,我使用以下方法:

用圆圈近似曲率

到目前为止这是最好的(2位正确的有效数字),但我需要进一步改进.所以我的新想法如下:

我不想使用离散点处的值来确定曲率,而是想用三维样条曲面近似脉冲轮廓.然后我从中提取某个值的水平集,以获得平滑的点线,我可以从中找到一个很好的曲率.

到目前为止,我找不到可以生成这样的Bezier样条曲面的C++库.你能指点我吗?

您是否认为这种方法值得一试,或者我的曲率会失去太多精确度?

你知道其他任何方法吗?

非常友好的问候,Jan

编辑:似乎我不能以新用户的身份发布图片,所以我从我的问题中删除了所有这些图片,即使我觉得它们很重要,可以解释我的问题.有什么办法我还能给他们看吗?

edit2:好的,完成了:)

c++ algorithm bezier surface spline

22
推荐指数
1
解决办法
7383
查看次数

在matplotlib中显示最大表面?

我正在使用matplotlib在同一个图上绘制多个曲面,我想只看到最顶层的曲面,就像matlab所示.

Matlab 3D视图: Matlab 3D视图

Matlab顶视图: Matlab顶视图

Matplotlib 3D视图: Matplotlib 3D视图

Matplotlib顶视图: Matplotlib顶视图

我怎样才能让Matplotlib显示类似于Matlab的结果,其中最顶层的类显示在顶部,而不是一个类优先于另一个?

matlab plot matplotlib surface

18
推荐指数
2
解决办法
1873
查看次数

R +情节:革命的坚实

我有一个功能r(x),我想围绕x轴旋转,以获得我想要使用(着色)添加到现有绘图的旋转实体.plot_lyadd_surfacex

这是一个例子:

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)

r surface plotly r-plotly

18
推荐指数
4
解决办法
581
查看次数

如何使用Pygame裁剪图像?

我正在学习pygame并想要一个具有三种状态的按钮的图形:正常,悬停和按下.我有一个像这样的图像......

三个按钮状态,垂直堆叠

......我希望Surface使用它的一部分得到一个新的.

我正在使用以下代码加载图像:

 buttonStates = pygame.image.load(os.path.join('image','button.png'))
Run Code Online (Sandbox Code Playgroud)

如何仅使用该图形的一部分来制作新曲面?

python pygame image crop surface

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

简化3d曲面的算法?

我有一组接近表面的3d点.但是,每个点都会出现一些错误.此外,点集包含的点数远远多于表示底层表面所需的点数.

我正在寻找的是一种算法来创建一个新的(小得多)点集,表示一个简化,更平滑的表面版本(原谅没有比"简化,更平滑"更好的定义).底层表面不是数学表面,所以我不希望将数据集拟合到某些数学函数中.

algorithm math surface

15
推荐指数
1
解决办法
3094
查看次数

使用Plotly渲染MATLAB补丁面fig2plotly()

问题:尝试导出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)

有什么建议?

matlab surface plotly

13
推荐指数
1
解决办法
435
查看次数

网格到网格交叉点

我正在寻找一个图书馆或一篇论文来描述如何确定一个三角形网格是否与另一个三角形网格相交.

有趣的是,我很空虚.如果有一些方法可以在CGAL中做到这一点,它就是在逃避我.

看起来它应该是可能的,因为三角形交叉是可能的,因为每个网格包含有限数量的三角形.但我认为必须有一种比明显的O(n*m)方法更好的方法,其中一个网格有n个三角形而另一个网格有m个三角形.

mesh surface triangulation computational-geometry

11
推荐指数
3
解决办法
7959
查看次数

在matplotlib的表面和3d等高

我想使用色彩图,线框和轮廓绘制表面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)

python matplotlib surface mplot3d

10
推荐指数
2
解决办法
2万
查看次数

用R点云覆盖的区域

我在2D欧几里德空间中散布着一团点.我想计算连接云的最极端(=外围)点的多边形内的区域.换句话说,我想估计这个空间中云所覆盖的区域.R中有一个公式吗?非常感谢任何回应Julien

cloud 2d r surface area

9
推荐指数
1
解决办法
2978
查看次数

MediaRecorder 和 VideoSource.SURFACE,停止失败:-1007(一个严重的 Android 错误)

我正在尝试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

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