如何在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的方法?