- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一组点 (x0,y0)... (xn,yn)
x
中的单调并希望通过这些使用贝塞尔曲线绘制“最佳”曲线。这条曲线不应该太“锯齿”(例如,类似于连接点),也不能太弯曲(绝对不能“倒退”)。我已经创建了一个原型(prototype),但想知道是否有客观的“最佳解决方案”。
我需要找到所有段的控制点 xi,y1 x(i+1)y(i+1)
.我当前的分段方法(端点除外)x(i), x(i+1)
是:
x(i-1)...x(i+1)
,标准化,并按 factor * len(i,i+1)
缩放给出前导控制点的向量 x(i+2)...x(i)
,标准化,并按 factor * len(i,i+1)
缩放给出尾随控制点的向量。 Y
反对
X
(单调
X
)没有
close
-ing。我已经建立了自己的用于创建 SVG 的库(首选输出);这段代码创建了
x,y
的三元组在
coordArray
对于每个曲线段(control1、xcontrol2、end)。开始由最后一次操作(移动或曲线)假设。它是 Java,但应该易于解释(
CurvePrimitive
映射到立方,
"d"
是 SVG 中完整路径的字符串表示形式)。
List<SVGPathPrimitive> primitiveList = new ArrayList<SVGPathPrimitive>();
primitiveList.add(new MovePrimitive(real2Array.get(0)));
for(int i = 0; i < real2Array.size()-1; i++) {
// create path 12
Real2 p0 = (i == 0) ? null : real2Array.get(i-1);
Real2 p1 = real2Array.get(i);
Real2 p2 = real2Array.get(i+1);
Real2 p3 = (i == real2Array.size()-2) ? null : real2Array.get(i+2);
Real2Array coordArray = plotSegment(factor, p0, p1, p2, p3);
SVGPathPrimitive primitive = new CurvePrimitive(coordArray);
primitiveList.add(primitive);
}
String d = SVGPath.constructDString(primitiveList);
SVGPath path1 = new SVGPath(d);
svg.appendChild(path1);
/**
*
* @param factor to scale control points by
* @param p0 previous point (null at start)
* @param p1 start of segment
* @param p2 end of segment
* @param p3 following point (null at end)
* @return
*/
private Real2Array plotSegment(double factor, Real2 p0, Real2 p1, Real2 p2, Real2 p3) {
// create p1-p2 curve
double len12 = p1.getDistance(p2) * factor;
Vector2 vStart = (p0 == null) ? new Vector2(p2.subtract(p1)) : new Vector2(p2.subtract(p0));
vStart = new Vector2(vStart.getUnitVector().multiplyBy(len12));
Vector2 vEnd = (p3 == null) ? new Vector2(p2.subtract(p1)) : new Vector2(p3.subtract(p1));
vEnd = new Vector2(vEnd.getUnitVector().multiplyBy(len12));
Real2Array coordArray = new Real2Array();
Real2 controlStart = p1.plus(vStart);
coordArray.add(controlStart);
Real2 controlEnd = p2.subtract(vEnd);
coordArray.add(controlEnd);
coordArray.add(p2);
// plot controls
SVGLine line12 = new SVGLine(p1, controlStart);
line12.setStroke("red");
svg.appendChild(line12);
SVGLine line21 = new SVGLine(p2, controlEnd);
svg.appendChild(line21);
return coordArray;
}
最佳答案
贝塞尔曲线需要数据点,以及每个点的斜率和曲率。在图形程序中,斜率由控制线的斜率设置,曲率由长度可视化。
当您没有用户输入此类控制线时,您需要估计每个点的梯度和曲率。维基百科页面http://en.wikipedia.org/wiki/Cubic_Hermite_spline ,特别是“插值数据集”部分有一个直接采用这些值的公式。
通常,从点估计这些值是使用有限差分完成的 - 因此您可以使用任一侧的点的值来帮助估计。这里唯一的选择是如何处理只有一个相邻点的端点:您可以将曲率设置为零,或者如果曲线是周期性的,您可以“环绕”并使用最后一个点的值。
我引用的维基百科页面也有其他方案,但大多数其他人介绍了一些其他“免费参数”,您需要找到一种设置方式,因此在没有更多信息来帮助您决定如何设置其他参数的情况下,我' d 选择简单的方案,看看你是否喜欢结果。
如果维基百科的文章不够清楚,请告诉我,我会敲一些代码。
需要注意的另一点:您追求的是什么“类型”的贝塞尔插值?大多数图形程序在二维中进行三次贝塞尔曲线(即您可以绘制圆形曲线),但您的示例图像看起来可能是一维函数近似值(因为每个 x 只有一个 y 值)。我引用的页面上并没有真正提到图形程序类型曲线。将斜率和曲率的估计值转换为 http://en.wikipedia.org/wiki/B%C3%A9zier_curve 中所示形式的控制向量所涉及的数学运算(Cubic Bezier) 需要一些锻炼,但这个想法是相似的。
下面是可能方案的图片和算法,假设您唯一的输入是三个点 P1、P2、P3
构造一条线 (C1,P1,C2),使得 (P3,P1,C1) 和 (P2,P1,C2) 的角度相等。以类似的方式构建其他深灰色线条。这些深灰色线的交点(标记为 C1、C2 和 C3)成为控制点,与贝塞尔曲线维基百科网站上的图像具有相同的意义。所以每条红色曲线,例如 (P3,P1),都是由点 (P3, C1, P1) 定义的二次贝塞尔曲线。红色曲线的构造与维基百科网站上给出的相同。
但是,我注意到 Bezier Curve 维基百科页面上的控制向量似乎与您使用的控制向量类型不匹配,因此您可能必须弄清楚如何将这两种方法等同起来。
关于graphics - 使用贝塞尔曲线绘制图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14398178/
我正在尝试创建 treasury yield curve 的图表比较两个不同日期的汇率。我很难将两条曲线组合起来并创建一个干净的图形。 我的问题:如何将两条 yield 曲线绘制在一起, yield
我在 R 平台中使用 randomForest 包进行分类任务。 rf_object<-randomForest(data_matrix, label_factor, cutoff=c(k,1-k))
我的设计师给我设计了这个设计,但我不知道如何最好地处理图像上方和下方的曲线。 我考虑过 clip-path 但不知道如何 flex 它。如果可以的话,我不想使用图像。 最佳答案 您可以使用 borde
我正在使用 Canvas 中的笔触和路径来制作两条线,我希望它们像波浪效果一样弯曲。而不是在 Photoshop 中创建实际图像来实现此目的。 谁能帮忙得到如下图所示的曲线? 我还想在末端实现圆 An
我正在尝试开发一种可以处理图像骨架的路径/曲线的代码。我想要一个来自两点之间骨架的点 vector 。 这段代码加了点就结束了,没找到解决办法。 #include "opencv2/highgui/
现在需要帮助。我可以用MKPolyline和MKPolylineView画线,但是如何在MKMapView上的两个坐标之间画弧线或曲线呢?非常感谢。 最佳答案 在回答问题之前,重要的是要提到 MKOv
我正在尝试应用 sklearn 的想法 ROC extension to multiclass到我的数据集。我的每类 ROC 曲线看起来都找到了一条直线,取消显示曲线波动的 sklearn 示例。 我
我有以下概念问题,我无法理解。 以下是调查数据示例,其中我有一个时间列,指示某人需要多长时间才能回答某个问题。 现在,我感兴趣的是清洁量将如何根据此阈值发生变化,即如果我增加阈值会发生什么,如果我降低
如何为使用视频的对象检测应用绘制每个窗口的误报率与未命中率(或误报概率)和 ROC(接收器操作曲线)的图表?如何确定误报和命中的数量?一个例子是很有用。 最佳答案 它很简单。将所有真正 (H0) 值存
我正在尝试绘制随机森林分类的 ROC 曲线。绘图有效,但我认为我绘制了错误的数据,因为生成的绘图只有一个点(准确性)。 这是我使用的代码: set.seed(55) data.controls <
我有如下两个模型: library(mlbench) data(Sonar) library(caret) set.seed(998) my_data <- Sonar fitControl <-
是否可以仅通过查看其 ROC 曲线来了解分类器是否过度拟合?我看到如果它的 AUC 太高(例如 98%)可能会过度拟合,但这也可能意味着分类器非常好。有没有办法区分这两种情况? 最佳答案 简短的回答:
我正在 JavaFX 中创建一个图形,它应该由有向边连接。最好是双三次曲线。有谁知道如何添加箭头? 箭头当然应该根据曲线的末端进行旋转。 这是一个没有箭头的简单示例: import javafx.ap
我需要对我正在尝试的技术进行一些说明。我正在尝试将一个实体从 A 点移动到 B 点,但我不希望该实体沿直线移动。 例如,如果实体位于 x: 0, y:0 并且我想到达点 x:50, y: 0,我希望实
我试图在曲线下方绘制阴影区域,但阴影区域位于曲线上方。谁能告诉我我的代码有什么问题? x=seq(0,30) y1=exp(-0.1*x) plot(x,y1,type="l",lwd=2,col="
我需要对我正在尝试的技术进行一些说明。我正在尝试将一个实体从 A 点移动到 B 点,但我不希望该实体沿直线移动。 例如,如果实体位于 x: 0, y:0 并且我想到达点 x:50, y: 0,我希望实
我有一个如下所示的模型: library(mlbench) data(Sonar) library(caret) set.seed(998) my_data <- Sonar fitControl <
有没有办法从pyspark中的Spark ML获取ROC曲线上的点?在文档中,我看到了一个 Scala 的例子,但不是 python:https://spark.apache.org/docs/2.1
我正在尝试使用Local Outlier Factor (LOF)算法,并想绘制 ROC 曲线。问题是,scikit-learn 提供的库不会为每个预测生成分数。 那么,有什么办法可以解决这个问题吗?
我目前正在使用 GDI+ 绘制折线图,并使用 Graphics.DrawCurve 来平滑线条。问题是曲线并不总是与我输入的点匹配,这使得曲线在某些点上超出了图形框架,如下所示(红色是 Graph
我是一名优秀的程序员,十分优秀!