我有样条曲线的数据
我需要使用绘制这条曲线Direct2D.目前我正在使用ID2D1GeometrySink接口绘制几何图形,但似乎它没有实现可能的AddSpline方法.
有没有办法通过Direct2D?绘制样条?即使是DirectX可以在Direct2D应用程序中使用的实现也没问题.
我试图在闪光灯中画一条连续的曲线.有很多方法,但到目前为止,我发现的方法都不符合我的要求.首先,我想使用flash图形api的curveTo()方法. 我不想模拟每曲线段数百次调用lineTo()的曲线. 根据我的经验和理解,线段处理器很重.Flash的二次贝塞尔曲线应该占用较少的CPU功率.如果你认为我错了,请挑战这个假设.
我也不想使用以整行作为参数的预制方法(例如mx.charts.chartClasses.GraphicsUtilities.drawPolyline()).原因是我最终需要修改逻辑以向我绘制的线添加装饰,所以我需要在最低级别理解的东西.
我现在创建了一个方法,使用此处的中点方法绘制给出3个点的曲线.
这是一张图片:

问题是线条实际上并没有穿过线条的"真实"点(灰色圆圈).有没有办法利用数学的力量,我可以调整控制点,使曲线实际上通过"真实"点?仅给出当前点及其上一个/下一个点作为参数?复制上面图片的代码如下.如果我可以修改它以满足此要求,那将是很好的(注意第一点和最后一点的例外).
package {
import flash.display.Shape;
import flash.display.Sprite;
import flash.display.Stage;
import flash.geom.Point;
[SWF(width="200",height="200")]
public class TestCurves extends Sprite {
public function TestCurves() {
stage.scaleMode = "noScale";
var points:Array = [
new Point(10, 10),
new Point(80, 80),
new Point(80, 160),
new Point(20, 160),
new Point(20, 200),
new Point(200, 100)
];
graphics.lineStyle(2, 0xFF0000);
var point:Point = points[0];
var nextPoint:Point = points[1];
SplineMethod.drawSpline(graphics, point, null, nextPoint);
var prevPoint:Point = point;
var n:int = …Run Code Online (Sandbox Code Playgroud) 我现在已经在互联网上搜索了一个小时没能成功,在我的生活中,我找不到splinefun使用时method='fmm'(如Forsythe,Malcolm和Moler的方法)样条曲线如何完全适合一组点的解释.我知道以下内容:
拟合具有N个节点的三次样条是(N-1)*4个未知数的问题.通过假设样条在结处是平滑的(精确地说:它的一阶和二阶导数是连续的),假设样条经过所有结和(N-2)*2条件,得到(N-1)*2个等式.这留下了两个条件来确定样条曲线.通过假设二阶导数在端点处为零来找到自然立方.但fmm确实有所不同.据我所知,它适合一个精确的立方体到一个结的子集(这个结?)然后在样条上强加这个立方的某些导数(这些导数在哪里评估?).
我正在尝试使用GNU科学库(GSL)绘制从A到B的平滑路径.我正在使用一个返回少量(在这种情况下为8)不规则间隔点(红色)的API,你可以在下图中看到:

紫色点表示我希望从GSL返回的点数.
首先,这种2D B样条形状是否可以通过GSL获得?我不太了解B-Splines,更不用说2D B-Splines了.我能够让这里显示的B-Splines示例运行并创建一个平滑的.ps文件而没有问题,但该示例使用带有以下代码的统一断点:
/* use uniform breakpoints on [0, 15] */
gsl_bspline_knots_uniform(0.0, 15.0, bw);
Run Code Online (Sandbox Code Playgroud)
在我的情况下,鉴于我给出的数据不稳定且间距不均匀,我是否必须使用非均匀结?我尝试使用gsl_bspline_knots(),以便在下面的测试代码中使用非均匀断点,但我真的不确定这是否是正确的方向.
#define NCOEFFS 8 // not sure what this number should be - number of data points?
#define NBREAK (NCOEFFS - 2)
const size_t nbreak = NBREAK;
int main (void) {
// (example code)...
gsl_vector *non_uniform = gsl_vector_alloc(nbreak);
// create some random breakpoint values
for (i=0; i<nbreak; i++) {
double val = gsl_ran_gaussian(r, 2.0);
printf("val: %f\n", val);
gsl_vector_set(non_uniform, i, val); …Run Code Online (Sandbox Code Playgroud) 我想对人口数据执行(立方)样条插值,以将年度数据"转换"为季度数据.我知道有相当多的缺陷,但我需要这样做.
这是我的代码示例(使用通用输入数据):
#--------------spline interpolation
x = c(1973:2014)
population = seq(500000, 600000, length.out = 42)
list = spline(x, population, n = 4*length(x), method = "fmm",
xmin = min(x), xmax = max(x), ties = mean)
x_spline = list$x
pop_spline = list$y
Run Code Online (Sandbox Code Playgroud)
如何定义样条曲线是"每季度"计算的,换句话说是1973.25,1973.5,1973.75,1974等?很抱歉不是统计专家:将年度数据"转换"成季度数据的最佳方法是什么:"fmm","natural","periodic","monoH.FC"或"hyman"?假设人口增长在一年中均匀分布.
致以最诚挚的问候和许多感谢!
我需要绘制最佳拟合的平滑曲线,但我发现的所有方法都使用 scipy.optimize.curve_fit(),这需要知道与 x 和 y 相关的函数。对于基本散点图,是否有更简单的方法?
我试图得到的曲线:
import matplotlib.pyplot as plot
x = range(30)
y = [1, 1, 1, 2, 1, 1, 1, 2, 4, 5, 8, 12, 13, 14, 12, 11, 9, 6, 5, 4, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1 ]
plot.plot(x, y, "o")
plot.show()
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
有一个问题,在ggplot中添加图例到不同的光滑.
library(splines)
library(ggplot2)
temp <- data.frame(x = rnorm(200, 20, 15), y = rnorm(200, 30, 8))
ggplot(data = temp, aes(x, y)) + geom_point() +
geom_smooth(method = 'lm', formula = y ~ bs(x, df=5, intercept = T), col='blue') +
geom_smooth(method = 'lm', formula = y ~ ns(x, df=2, intercept = T), col='red')
Run Code Online (Sandbox Code Playgroud)
我有两个样条:红色和蓝色.我如何为他们添加传奇?
我想gam在mgcv包中使用函数:
x <- seq(0,60, len =600)
y <- seq(0,1, len=600)
prova <- gam(y ~ s(x, bs='cr')
Run Code Online (Sandbox Code Playgroud)
我可以设置结数s()吗?然后我可以知道花键使用的结点在哪里?谢谢!
我感兴趣的是lm函数的一些令人不安的行为以及predict.lmR中的相关函数.splines基础包提供了bs生成b样条展开的函数,然后可以使用lm多功能线性模型拟合函数来拟合样条模型.
这些lm和predict.lm函数具有很多内置的便利性,可以利用公式和术语.如果调用bs()嵌套在lm调用内,则用户可以提供单变量数据predict,并且此数据将自动扩展为适当的b样条基础.然后将照常预测这种扩展的数据矩阵.
library(splines)
x <- sort(runif(50, 0, 10))
y <- x^2
splineModel <- lm(y ~ bs(x, y, degree = 3, knots = c(3, 6)))
newData <- data.frame(x = 4)
prediction <- predict(splineModel, newData) # 16
plot(x, y)
lines(x, splineModel$fitted.values, col = 'blue3')
points(newData$x, prediction, pch = 3, cex = 3, col = 'red3')
legend("topleft", legend = c("Data", "Fitted Values", "Predicted …Run Code Online (Sandbox Code Playgroud) 采用看起来像这样的数据框,包含2005年某些日期的数据和每个日期的测量数据.
df <- data.frame("date" = c('2005-04-04','2005-04-19', '2005-04-26', '2005-05-05',
'2005-05-12', '2005-05-25', '2005-06-02', '2005-06-16', '2005-07-07', '2005-07-14',
'2005-07-21', '2005-08-04'), "numbers" = c(90,50,50,48,44,37,34,30,36,31,49,54))
Run Code Online (Sandbox Code Playgroud)
我希望在一年中的每一天基于此创建1:365的值序列,主要是为了创建一个新的数据框,从2005年1月1日到2005年12月31日,其中已经填充了来自a的值.样条函数拟合这些现有的12个值.
当我尝试使用以下方法时:
numbers <- df$numbers
x = spline(1:365, numbers)
Run Code Online (Sandbox Code Playgroud)
我明白了
xy.coords中的错误(x,y,setLab = FALSE):'x'和'y'长度不同'
我不确定出了什么问题.