2011-03-17 150 views

回答

1

大多數繪圖API不提供這樣的功能,您將必須以像素爲單位計算所需曲線的像素,並使用對畫布API的一次或多次調用在畫布上逐個繪製。

0

我假設你熟悉在畫布上繪製基本線條,如果沒有,然後迴應,我們可以進一步回溯。然而,就繪製一個正弦函數而言,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

4

這是我爲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(); 

}; 
5

和你一樣,我需要畫一條曲線從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);