python畫畫bup_Python中的高效Vector / Point類

實現高效的Vector / Point類的最佳方法是什么(甚至更好:是否有一個),可以在

Python 2.7和3.x中使用?

我找到了the blender-mathutils,但它們似乎只支持Python 3.x.然后是this Vector class,使用numpy,但它只是一個3D矢量.使用具有靜態屬性(x和y)的像kivy’s vector class(sourcecode)的Vector的列表似乎也很奇怪. (有所有這些列表方法.)

目前我正在使用一個擴展了namedtuple的類(如下所示),但這樣做的缺點是無法更改坐標.我認為當成千上萬的對象移動并且每次都創建一個新的(矢量)元組時,這可能會成為一個性能問題. (對?)

class Vector2D(namedtuple('Vector2D', ('x', 'y'))):

__slots__ = ()

def __abs__(self):

return type(self)(abs(self.x), abs(self.y))

def __int__(self):

return type(self)(int(self.x), int(self.y))

def __add__(self, other):

return type(self)(self.x + other.x, self.y + other.y)

def __sub__(self, other):

return type(self)(self.x - other.x, self.y - other.y)

def __mul__(self, other):

return type(self)(self.x * other, self.y * other)

def __div__(self, other):

return type(self)(self.x / other, self.y / other)

def dot_product(self, other):

return self.x * other.x + self.y * other.y

def distance_to(self, other):

""" uses the Euclidean norm to calculate the distance """

return hypot((self.x - other.x), (self.y - other.y))

編輯:我做了一些測試,似乎使用numpy.array或numpy.ndarray作為矢量太慢了. (例如,獲取一個項目需要幾乎兩倍的時間,更不用說創建一個數組.我認為它更適合于對大量項目進行計算.)

所以,我正在尋找一個輕量級的矢量類,它具有固定數量的字段(在我的例子中只有x和y),可以用于游戲. (如果已經有一個經過充分測試的車輪,我不想重新發明輪子.)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374005.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSDN 編程挑戰——《coder的計算器》

coder的計算器 題目詳情: coder現在已經上初中,也會用計算器實現 ,-,*,/和冪運算^了,但他覺得市場那些計算器太繁瑣了,有很多他不認識的符號,所以他現在很想要能計算帶括號的 ,-,*,/和冪運算^的混合表達式就可以了,你…

OpenShift Express:部署Java EE應用程序(支持AS7)

在過去的幾年中,我越來越聽到有關“云”服務的信息。 最初,我并不是很想嘗試一下。 但是幾個月后(一年?),我決定看看這是怎么回事。 我從事Java EE開發已經超過7年了,所以我決定看看將Java EE應…

07 總結ProgressDialog 異步任務

1,ProgressDialog> //使用對象 設置標題 progressDialog.setTitle("標題"); //設置圖標 progressDialog.setIcon(R.drawable.ic_launcher); //設置展示的內容 progressDialog.setMessage(&q…

python函數封裝計算n運算_在Python里面怎么可以運算出999999999**999999999,求思路?...

>>> 999999999 * math.log(999999999, 2) / 8 / 1024 ** 33.480509950621777所以這個數字本身就差不多需要3.5GB內存,考慮到計算過程中需要存儲臨時結果,還需要翻個兩三倍吧而Python中的long可以到多少呢:#define MAX_LONG_DIGITS \…

C++中const關鍵字的使用總結

const是不變的意思,在C程序中,經常用const來限制對一個對象的操作: 1.1 const變量 例如: const int n3; 則這個變量的值不能改變,即不能對變量賦值。 1.2 const參數 出現在函數參數中的const表示在函數體中不能對這個參數做修改…

php封裝redis負載均衡類

$array array( master > array( "redis://127.0.0.1:6379?timeout1", ), slave > array( "redis://127.0.0.1:6479?timeout1", "redis://127.0.0.1:6579?timeout1", ) ); $redis R…

我今天對JavaFX的了解

如果您沒有聽說過,JavaFX 2是Java的新Desktop / web / client框架。 自JavaFX 1以來,它已經進行了相當大的改動(坦率地說,效果并不那么令人印象深刻)。 自定義腳本語言已經淘汰了,您可以使用標準Java和基于…

怎么解決xp系統不能安裝NET Framework4.0?

.net 4.0安裝不上解決方法: 引用 9 樓 MoreQuestion 的回復: 全部都不行!就是用360軟件管家安裝那個就可以了。用了樓主的方法,果然可行啊 1.先安裝wic。 2.用360安裝.net40 本帖最后由 不懂 于 2014-6-6 00:56 編輯Windows Server 2003 如何…

C++內聯(inline)函數

內聯函數 內聯函數是一種特殊類型的函數,內聯函數在定義或聲明時前面加上“inline”關鍵字。比如: inline int max(int a,int b) { return (a>b)?a:b; } 內聯(inline)是內聯擴展(inline expansion)的簡…

我的python學習筆記全集_記錄我的Python學習筆記

不想再像以前那樣,什么都從頭開始學習語法、總結語法,這樣反而會過分糾結于語法,耽誤了開發,畢竟語言的主要屬性是工具,次要的屬性是語言本身。所以還是先熟練使用語言去進行開發,等足夠熟悉了,…

HDU 5794:A Simple Chess(Lucas + DP)

題目鏈接:http://acm.split.hdu.edu.cn/showproblem.php?pid5794 題意:讓一個棋子從(1,1)走到(n,m),要求像馬一樣走日字型并只能往右下角走。里面還有r個障礙點不能經過或者到達&am…

php源碼分析之PHPAPI宏的作用

在PHP源碼中,我們經常會看到很多函數前面有個PHPAPI,但這是什么呢? 于是我在php源碼/main/php.h中找到了它的定義 #ifdef PHP_WIN32 # include "tsrm_win32.h" # include "win95nt.h" # ifdef PHP_EXPORTS # …

15分鐘內開始使用Amazon Web Services和全自動資源調配

在等待一個新項目時,我想學習一些有用的東西。 而且由于在許多項目中我們需要評估和測試正在開發的應用程序的性能,而很少有足夠的硬件來生成實際負載,因此我決定學習更多有關按需在云中按需配置虛擬機的知識,即Amazon Web Servic…

解析JVM內存區域組成

在方法(代碼塊)中定義一個變量時,java就在棧中為這個變量分配JVM內存空間,當超過變量的作用域后,java會自動釋放掉為該變量所分配的JVM內存空間;而在堆中分配的JVM內存由java虛擬機的自動垃圾回收器來管理。…

python打開瀏覽器后帶cookie_Python爬蟲使用瀏覽器的cookies:browsercookie

很多用Python的人可能都寫過網絡爬蟲,自動化獲取網絡數據確實是一件令人愉悅的事情,而Python很好的幫助我們達到這種愉悅。然而,爬蟲經常要碰到各種登錄、驗證的阻撓,讓人灰心喪氣(網站:天天碰到各種各樣的爬蟲抓我們網…

VS插件開發

參考資料: VS插件開發 - 個性化VS IDE編輯器 自己動手編寫一個VS插件(一) VS Addin插件基本開發入門 VS Addin插件配置、部署 轉載于:https://www.cnblogs.com/wangwangfei/p/5830081.html

使用AspectJ,Javassist和Java Proxy進行代碼注入的實用介紹

靜態地或在運行時將代碼片段注入已編譯的類和方法中的功能可能會很有幫助。 這尤其適用于在沒有源代碼的第三方庫中或在無法使用調試器或探查器的環境中對問題進行故障排除。 代碼注入對于處理涉及整個應用程序的問題(例如性能監視)也很有用。 以這種方式…

Java中的變量

java類的成員變量有兩種:一種是被static關鍵字修飾的變量,叫類變量或者靜態變量;另一種沒有static修飾,為實例變量。 在語法定義上的區別:靜態變量前要加static關鍵字,而實例變量前則不加。 在程序運行時的…

無限漫游

一、FAT AP架構下,AP設備不做認證時: (1) AP1,AP2正常工作,發送Beacon幀,向STA通告支持的無線服務; (2) STA搜索到AP1的信號,向AP1發Probe Request,請求獲取AP1所提供的無線服務;AP…

uni-app內置地圖軌跡_MIUI11 新增親情守護,支持安全圍欄、運動軌跡功能

點擊右上角關注我們,每天給您帶來最新最潮的科技資訊,讓您足不出戶也知道科技圈大事!日前,小米 MIUI 體驗總負責人 MIUI小凡 在微博上為大家預告了 MIUI11 的新特性「親情守護」,并表示「在親情守護中,我們…