如何在Canvas
上绘制二次曲线或三角曲线(如sin(x)
)?在画布上绘制曲线路径?
回答
大多数绘图API不提供这样的功能,您将必须以像素为单位计算所需曲线的像素,并使用对画布API的一次或多次调用在画布上逐个绘制。
我假设你熟悉在画布上绘制基本线条,如果没有,然后回应,我们可以进一步回溯。然而,就绘制一个正弦函数而言,Math类中有一个函数就是你所需要的。 http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#sin%28double%29 从那里你只需要将你的x变量(弧度)传递给函数并将其输出保存为y变量。这代表了图上的一个点。现在将x1变量增加一小部分(可能是图形的1/100,尽管您需要调整它以适应味道),再次通过函数运行并保存这些变量(x2和y2)作为第二点。在这两点之间画一条线。将x2,y2变量保存为x1,y1并再次增加x值以找到第三个点,如此等等。这不是一个“真实”的曲线,因为它实际上只是一系列近似函数的线,如果您愿意的话,也可以是微积分方法。
所以:
x1 = x; //其中x是您想要开始绘制的x轴上的某个点。
y1 = sin(x);
x2 = x1 +增量;
y2 = sin(x2);
//在这里画一条线
x1 = x2; y1 = y2;
//返回顶端,这段代码显然会在一个循环中使用增量,因为它是自己的增量,初始值等于每次增加的数量(比方说.... 5)和“下一个”语句是增量=增量+ 5.
还有一个GraphCanvas类,我不熟悉它似乎采取了相同的点,并绘制它们之间的曲线,虽然我不确定什么样的变换正在被用来绘制曲线以及它的精确程度。这里是该类: http://www.java2s.com/Code/Java/Swing-Components/GraphCanvas.htm
这是我为Graph类写的drawEquation()方法 - 我认为它可能有帮助。基本的想法创建接受的等式等
function(x) = Math.sin(x);
通过该图的边界的方法(这基本上是一个函数),然后循环,并绘制连接各点的小片段。该transformContext()刚刚反转画布背景下,使Y值增加向上走,而不是往下:
Graph.prototype.transformContext = function(){
var canvas = this.canvas;
var context = this.context;
// move context to center of canvas
this.context.translate(this.centerX, this.centerY);
// stretch grid to fit the canvas window, and
// invert the y scale so that that increments
// as you move upwards
context.scale(this.scaleX, -this.scaleY);
};
Graph.prototype.drawEquation = function(equation, color, thickness){
var canvas = this.canvas;
var context = this.context;
context.save();
this.transformContext();
context.beginPath();
context.moveTo(this.minX, equation(this.minX));
for (var x = this.minX + this.iteration; x <= this.maxX; x += this.iteration) {
context.lineTo(x, equation(x));
}
context.restore();
context.lineJoin = "round";
context.lineWidth = thickness;
context.strokeStyle = color;
context.stroke();
};
和你一样,我需要画一条曲线从point(x1, y1)
到point (x2, y2)
。我做了一些搜索,找到了Path类(android.graphics.Path
)。路径有很多绘制线条的方法。一旦创建了一条路径,就可以使用绘制方法来制作实际的线条。路径可以被旋转,转换,保存并添加到。也有用这个类绘制的弧形,圆形和矩形。 →mPath.moveTo(x1, y1);
设定参数和终点→mPath.quadTo(cx, cy, x2, y2);
将路径转换的路径
http://developer.android.com/reference/android/graphics/Path.html
设置开始点到线→canvas.drawPath(mPath, mPaint);
- 1. 安卓绘制曲线路径动画画布
- 2. 在曲线路径上绘制形状或图像
- 3. 在浏览器画布上绘制埃米特曲线(javascript)
- 4. 在QML画布上绘制线段
- 5. 在HTML5画布上绘制虚线?
- 6. 在画布上绘制虚线
- 7. 如何翻转在HTML画布上绘制的路径
- 8. 在画布上绘制多条贝塞尔路径
- 9. 如何在HMTL5画布上绘制矩形时清除路径
- 10. 如何绘制路径机器人在画布上
- 11. 绘制带箭头的曲线线在机器人画布
- 12. 画布 - 在两个控件之间的最近路径上绘制线
- 13. 画布:动画贝塞尔曲线绘制
- 14. 如何绘制直线和曲线运动指定的路径
- 15. Bezier曲线绘制拉伸椭圆在HTML5画布
- 16. 在画布上绘制ArcTo
- 17. 绘制在画布上
- 18. 在画布上绘制
- 19. 在子画布上绘制
- 20. 在Scala.js上绘制画布
- 21. 在画布上绘制SVG
- 22. 路径动画曲线核心图形
- 23. 在Android上使用路径在画布上绘制自定义形状
- 24. SVG路径曲线在相反方向上动画
- 25. 如何绘制弯曲的svg路径
- 26. 如何在HTML5的画布中部分绘制路径?
- 27. 在Android应用程序中未绘制到画布的路径
- 28. 如何在android中绘制路径到画布中?
- 29. 当在HTML5画布上重现曲线时,点没有被绘制
- 30. 在弯曲路径上绘制NSString的方法?