2014-10-18 76 views
0

我想在WPF中繪製折線。但僅僅是因爲點之間的差異非常小才表明了一點。我也應用了scaleTransform和TranslateTransform,但問題依然存在。WPF繪圖問題

代碼是

double minX = 25.52524938052284; 
double minY = 44.267051317656474; 
double maxX = 25.525239580522843; 
double maxY = 44.26684671765647; 
System.Windows.Point point1 = new System.Windows.Point(minX, minY); 
System.Windows.Point point2 = new System.Windows.Point(maxX, maxY); 

Polyline myPolyline = new Polyline(); 
myPolyline.Stroke = System.Windows.Media.Brushes.SaddleBrown; 
myPolyline.StrokeThickness = 1; 

polylinePointCollection.Add(point1); 
polylinePointCollection.Add(point2); 

ScaleTransform st = new ScaleTransform(100000,100000,25,25); 
myPolyline.RenderTransform = st; 
TranslateTransform tt = new TranslateTransform(100, 100); 
myPolyline.RenderTransform = tt; 
canvas.Children.Add(myPolyline); 

這是示例代碼。我有一個從15到20的點數列表,所以這個座標之間的基本差別必須顯示在屏幕上,但它只顯示一個點。

+0

我不確定你是否顯示了足夠的代碼。帆布如何掛在窗戶上? – Brannon 2014-10-18 13:44:36

回答

1

您正在處理一些非常小的差異,因此轉換座標非常敏感。以您的代碼和做一些小的調整,考慮以下因素:

(跳過翻譯和調整數量極少量)

double minX = 25.52524938052284; 
double minY = 44.267051317656474; 
double maxX = 25.525239580522843; 
double maxY = 44.26684671765647; 

double diffX = maxX - minX;   // -0.0000097999999972842033 
double diffY = maxY - minY;   // -0.00020460000000355194 

// setting values to positive small differences 
minX = 25.525d; 
minY = 44.266d; 
maxX = 25.526d; 
maxY = 44.267d; 

System.Windows.Point point1 = new System.Windows.Point(minX, minY); 
System.Windows.Point point2 = new System.Windows.Point(maxX, maxY); 

Polyline myPolyline = new Polyline(); 
myPolyline.Stroke = System.Windows.Media.Brushes.SaddleBrown; 
myPolyline.StrokeThickness = 0.0003d; // <-- necessary due to scaling 

myPolyline.Points.Add(point1); 
myPolyline.Points.Add(point2); 

System.Windows.Point center = new System.Windows.Point(); 
center.X = minX + ((maxX - minX)/2.0d) - 0.001d; 
center.Y = minY + ((maxY - minY)/2.0d) - 0.001d; 

double scale = 100000.0d; 
//ScaleTransform st = new ScaleTransform(100000, 100000, 25, 25); 
ScaleTransform st = new ScaleTransform(scale, scale, center.X, center.Y); 
myPolyline.RenderTransform = st; 

//TranslateTransform tt = new TranslateTransform(100, 100); 
//myPolyline.RenderTransform = tt; 
canvas.Children.Add(myPolyline); 

會產生這樣的結果:

screenshot

公差對於規模和翻譯都非常敏感。您可能會發現使用某個係數放大數字更容易。請注意筆劃厚度調整到這樣一個小值。稍微增加它實際上會使線看起來像是朝不同的方向。

希望這會有所幫助!