我正在將一個遺留的CAD應用程序移植到.NET。它的圖形需求不是很複雜,只要你不做任何奇特的事情,GDI +和一些優化都有很好的性能。不過,我也會支持Direct2D,因爲它提供了更好的體驗和性能。圖形GDI +/Direct2D和世界大小
我的問題是,舊的應用程序支持墨卡託座標,他們只是不適合浮動,所以應用程序崩潰和GDI +不適合極端的翻譯轉換。 我看到Direct2D也使用浮動。
那麼我應該爲此實現自定義矩陣,以便將其轉換爲屏幕座標?還有其他解決方案嗎?
我正在將一個遺留的CAD應用程序移植到.NET。它的圖形需求不是很複雜,只要你不做任何奇特的事情,GDI +和一些優化都有很好的性能。不過,我也會支持Direct2D,因爲它提供了更好的體驗和性能。圖形GDI +/Direct2D和世界大小
我的問題是,舊的應用程序支持墨卡託座標,他們只是不適合浮動,所以應用程序崩潰和GDI +不適合極端的翻譯轉換。 我看到Direct2D也使用浮動。
那麼我應該爲此實現自定義矩陣,以便將其轉換爲屏幕座標?還有其他解決方案嗎?
也許這個庫可以在你的移植過程幫助:
https://github.com/NetTopologySuite/NetTopologySuite
這是JTS(Java的拓撲套件)的端口,其中包括幾何/ GIS相關的功能。
GeoAPI.NET項目(NetTopologySuite的一部分)提供了基礎幾何類,座標系等。
看看一個這個Coordinate
類,他們的場X,Y和Z是雙精度:
https://github.com/NetTopologySuite/GeoAPI/blob/master/GeoAPI/Geometries/Coordinate.cs
兩個GDI +和Direct2D中使用浮動。
Graphics Cards that support doubles do exist但你可以不使用這種通過GDI +或Direct2D的
我看到一對夫婦的選項來加載使用GDI +/Direct2D的取決於所需的速度和精度:
裝入數據使用雙打和縮放/加載後立即轉換爲浮動。這允許您使用GDI +,Direct2D和任何相關庫的所有特性來操縱模型(旋轉,縮放,平移等)。缺點是模型在轉換之前失去精度。
使用雙精度加載數據,使用雙精度進行所有操作並在縮放之前將其轉換爲浮點數。缺點:您需要查找或編寫一個使用雙打操作數據的庫,並且不能將GPU用於操作。正面的:精度保持更長,可能對您的數據至關重要。
我會先嚐試選項1,因爲它更容易(更標準的圖形編程)。只有當精度證明不足時,我會嘗試選項2.
我沒有使用/編程雙精度API的經驗,也許別人會將其添加爲答案。
An interesting discussion on doubles/floats can be found here在此基礎上討論,我強烈建議你先嚐試找出是否需要雙精度都在年底將與單精度的屏幕上呈現。
我需要雙精度。看來autocad也可以用這種精度工作。例如,存儲在文件中的某些座標就像是X:4355974.24935948 – GorillaApe 2014-10-06 11:29:59
您是指CAD還是GIS?CAD系統支持絕對世界座標是不常見的。無論如何,如果是這種情況,並且問題與浮點精度不足有關,您是否可以將座標轉換爲本地系統以降低數量級? (即減去4355900左右,這取決於有用的範圍,以減少有效數字的數量。) – 2014-10-10 09:04:27
不,GDI +和Direct2D都嚴格使用單精度浮點。你將不得不通過更多關注你的投影來解決這個問題,遠離極點保持健康的邊緣:) – 2014-10-11 13:30:53