亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 6635 | 回復: 11
打印 上一主題 下一主題

新手急的直冒豆。。。請教各位高手 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-09-03 15:55 來自手機 |只看該作者 |倒序瀏覽
本帖最后由 xixi_kathrin 于 2013-09-03 15:59 編輯

我是機械專業(yè)學生一名,我的研究生畢業(yè)論文是研究碳纖維復合材料,現(xiàn)在我要用python見一個隨機分布的碳纖維,碳纖維是圓柱型的,之后導入abaqus中去,現(xiàn)在注意問題就是要在一個100um*100um的范圍內隨機的建50個直徑是6um
的圓,要求這些圓不能相交。我是想用見一個圓然后那個圓就被扣掉的方法算,除了用numpy里的set,可是現(xiàn)在思路不清,不知如何入手,編程一直是我的硬傷。。。請大家來幫幫忙,謝謝了
補充一下,我其實是要找這些圓的圓心,因為找到圓心,abaqus有自己花草圖的方法。。。就是圓心的這些點該怎么編呢

論壇徽章:
0
2 [報告]
發(fā)表于 2013-09-03 20:09 來自手機 |只看該作者
有木有牛人指點?

論壇徽章:
3
卯兔
日期:2013-08-15 13:17:31處女座
日期:2014-01-10 11:35:23雙子座
日期:2014-01-25 02:16:06
3 [報告]
發(fā)表于 2013-09-03 22:01 |只看該作者
有點像Voronoi,是這樣的嗎?

論壇徽章:
0
4 [報告]
發(fā)表于 2013-09-03 22:40 來自手機 |只看該作者
應該沒有這么復雜,我現(xiàn)在想找numpy或者是scipy里面有沒有差不多的東西可以直接用
import numpy
import scipy.spatial
points= numpy.random.random((10,2))tree= scipy.spatial.KDTree(points)
tree.query_ball_tree(tree,0.3)#0.3是距離
可是現(xiàn)在不知道在100*100的范圍內的點怎么搞

論壇徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龍
日期:2014-08-08 09:28:02獅子座
日期:2014-09-14 20:32:05
5 [報告]
發(fā)表于 2013-09-04 10:08 |只看該作者
本帖最后由 ssfjhh 于 2013-09-04 10:12 編輯
  1. import random
  2. L = 100
  3. N = 50
  4. D = 6

  5. s = []
  6. while len(s) < N:
  7.     a,b = random.sample(range(L), 2)
  8.     for i,j in s:
  9.         if (a-i)**2 + (b-j)**2 < D**2:
  10.             break
  11.     else:
  12.         s.append((a,b))

  13. print(s)
復制代碼

論壇徽章:
0
6 [報告]
發(fā)表于 2013-09-05 19:41 來自手機 |只看該作者
這個算法也是我最初想用的算法,但是被導師反駁掉了,因為實際的點比較多,這種方法計算時間太長
我導師的想法是,因為我辦公室電腦沒有中文,我只能用手機寫一下大概
1。先在100這個范圍里找N個點,就叫pointToCheck= [N]
Goodpoint=[0]
2。point=pointToCheck[0] # 指定第一個點
3。while len(pointToCheck) >0
       Goodpoint.append(point)
       otherpoint= set(pointToCheck[1:])# 就是初第一個點以外的點都是用set定義一下
4。import numpy
   import scipy.spatial
   tree=scipy.spatial.KDTree(point)
   Badpoint= tree.query_ball_tree(tree,6)# 離第一個找到點距離為6的點集叫badpoint
   pointToCheck_new= otherpoint.remove(badpoint)
就形成了一個新的范圍。。。然后再重復找第一個點
  等等,我因為沒有基礎,不知道怎么把這些東西串起來。。。很苦惱,問同學他們都不知道從哪說起,而且德國小孩子基礎非常好,他們8,9年紀就開始會編了

論壇徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龍
日期:2014-08-08 09:28:02獅子座
日期:2014-09-14 20:32:05
7 [報告]
發(fā)表于 2013-09-06 00:27 |只看該作者
本帖最后由 ssfjhh 于 2013-09-06 00:35 編輯

回復 6# xixi_kathrin


    嚴格來說,我的那個方法確實有問題,理論上有可能一直算不出結果。
但是你需要多少個點?試一下速度到底有多慢。

你的那個方法,我也沒有看懂,你電腦登錄后再詳細說一下吧。

剛才試了下,把范圍和數(shù)量擴大100倍,在我的i3筆記本上,等一小會兒就好了,速度完全可以接受,具體多久沒有試過,但是放大1000倍后,速度確實較慢,我等了一會兒,沒有耐心等了。

論壇徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龍
日期:2014-08-08 09:28:02獅子座
日期:2014-09-14 20:32:05
8 [報告]
發(fā)表于 2013-09-06 01:25 |只看該作者
本帖最后由 ssfjhh 于 2013-09-12 18:51 編輯

回復 6# xixi_kathrin


    我明白你的那個方法了,確實是個好方法,快了好多。代碼如下:
  1. import random, time

  2. L = 100000
  3. N = 50000
  4. D = 6

  5. def getpoint(L, N, D):
  6.     goodpoint = []
  7.     badpoint = set()

  8.     while len(goodpoint) < N:
  9.         pointtocheck = tuple(tuple(random.sample(range(D//2, L + 1 - D//2), 2)) for i in range(N - len(goodpoint)))
  10.         for p in pointtocheck:
  11.             if p not in badpoint:
  12.                 goodpoint.append(p)
  13.                 tempbadpoint = []
  14.                 x, y = p
  15.                 for i in range(max(D//2, x-D), min(L + 1 - D//2, x + D + 1)):
  16.                     for j in range(max(D//2, y-D), min(L + 1 - D//2, y + D + 1)):
  17.                         if (i-x)**2 + (j-y)**2 < D**2:
  18.                             tempbadpoint.append((i, j))
  19.                 badpoint.update(tempbadpoint)

  20.     print(goodpoint)


  21. start = time.clock()
  22. getpoint(L, N, D)
  23. end = time.clock()
  24. print(end - start)
復制代碼

論壇徽章:
0
9 [報告]
發(fā)表于 2013-09-06 16:23 |只看該作者
本帖最后由 drowsyboy 于 2013-09-06 16:27 編輯

我不會python, 提供簡單想法供參考

可以換一個想法:
a. 先把100*100的區(qū)域切分成多個6*6的區(qū)域,一個區(qū)域對應于一個你的需要圓,這樣就可以得到大約 (100/6) * (100/6) ~ 256個有效的正方形;
b. 在256個正方形中,隨機選取50個;
c. 對50個選中的方形,進行隨機游動
    for ( round = 0; round < N; round ++ ) {
          for(i = 0; i < 50; i ++ ) {
                   生成隨機游動方向 direction;
                   計算在該方向的最大游動距離 distance;
                   生成隨機游動距離;
                   游動方塊i
          }
    }

論壇徽章:
0
10 [報告]
發(fā)表于 2013-09-06 16:42 |只看該作者
本帖最后由 conn2011 于 2013-09-06 17:17 編輯

靈活運用random.sample可以偽造一個隨機點列表,至于能不能符合你的需求就不知道了,畢竟只是偽造。

還是給個例子吧,不知道夠不夠用,畢竟只是偽造。
  1. import random
  2. def getRandomPoints(x=100,y=100,d=6,num=50):
  3.     x_p = (x-d)*2/d
  4.     y_p = (y-d)*2/d
  5.     shift_x = (x-x_p*d/2)/2.0
  6.     shift_y = (y-y_p*d/2)/2.0
  7.     pls = reduce(lambda a,b: a.extend(b) or a ,[[(i*d/2+shift_x,j*d/2+shift_y) for j in xrange(y_p)] for i in xrange(x_p)])
  8.     if num >= len(pls):
  9.         return pls
  10.     return random.sample(pls,num)
復制代碼
同樣還是會有速度問題的
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP