青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

chaosuper85

C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
  118 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks

#


www.51voa.com

www.cnn.com

posted @ 2010-01-14 00:29 chaosuper 閱讀(110) | 評(píng)論 (0)編輯 收藏

為什么會(huì)出現(xiàn)select模型?

先看一下下面的這句代碼:
int iResult = recv(s, buffer,1024);
這是用來接收數(shù)據(jù)的,在默認(rèn)的阻塞模式下的套接字里,recv會(huì)阻塞在那里,直到套接字連接上有數(shù)據(jù)可讀,把數(shù)據(jù)讀到buffer里后recv函數(shù)才會(huì)返 回,不然就會(huì)一直阻塞在那里。在單線程的程序里出現(xiàn)這種情況會(huì)導(dǎo)致主線程(單線程程序里只有一個(gè)默認(rèn)的主線程)被阻塞,這樣整個(gè)程序被鎖死在這里,如果永 遠(yuǎn)沒數(shù)據(jù)發(fā)送過來,那么程序就會(huì)被永遠(yuǎn)鎖死。這個(gè)問題可以用多線程解決,但是在有多個(gè)套接字連接的情況下,這不是一個(gè)好的選擇,擴(kuò)展性很差。
再看代碼:
int iResult = ioctlsocket(s, FIOBIO, (unsigned long *)&ul);
iResult = recv(s, buffer,1024);

這一次recv的調(diào)用不管套接字連接上有沒有數(shù)據(jù)可以接收都會(huì)馬上返回。原因就在于我們用ioctlsocket把套接字設(shè)置為非阻塞模式了。不過 你跟蹤 一下就會(huì)發(fā)現(xiàn),在沒有數(shù)據(jù)的情況下,recv確實(shí)是馬上返回了,但是也返回了一個(gè)錯(cuò)誤:WSAEWOULDBLOCK,意思就是請(qǐng)求的操作沒有成功完成。 看到這里很多人可能會(huì)說,那么就重復(fù)調(diào)用recv并檢查返回值,直到成功為止,但是這樣做效率很成問題,開銷太大。

select模型的出現(xiàn)就是為了解決上述問題。

select模型的關(guān)鍵是使用一種有序的方式,對(duì)多個(gè)套接字進(jìn)行統(tǒng)一管理與調(diào)度

看核心代碼:(這里只給出服務(wù)端的)

while ( 1 )
{
// 初始化fdset
FD_ZERO( &fdsRead );

// 將server套接字添加到可讀集合中
FD_SET( sockServer, &fdsRead );

// 調(diào)用select
select( 0, &fdsRead, NULL, NULL, &tv );

// 判斷server套接字的狀態(tài),如果套接字還在可讀集合中,
// 說明有數(shù)據(jù)可以讀入,則建立套接字可以成功
if ( FD_ISSET( sockServer, &fdsRead ) )
{
sockAccept = accept( sockServer, (sockaddr*)&addr, &nLen );
// 有數(shù)據(jù)可讀,進(jìn)行相關(guān)處理
}

當(dāng)然了,這里演示的只是最基礎(chǔ)的select的用法。網(wǎng)絡(luò)通信中的I/O復(fù)用的相關(guān)問題還很多,還需要慢慢學(xué)習(xí)與深入。
posted @ 2010-01-13 23:04 chaosuper 閱讀(253) | 評(píng)論 (0)編輯 收藏

Ubuntu Apache-PHP-MySQL Server

  1. sudo apt-get install mysql-server-5.0 mysql-client-5.0
  2. sudo apt-get install apache2 php5 libapache2-mod-php5 php5-mysql libapache2-mod-auth-mysql

  3. 使用sudo a2enmod php5 enable php5模塊

測(cè)試一下:

     sudo vi /var/www/test.php

posted @ 2010-01-13 22:44 chaosuper 閱讀(99) | 評(píng)論 (0)編輯 收藏

  Ubuntu 在安裝時(shí),如同大部分 Linux 發(fā)行版一樣,都會(huì)同時(shí)安裝 GNU 版本的 Java。這個(gè) Java 的實(shí)用程度太低,尤其對(duì)于開發(fā)人員來說,是沒有太多用處的。在 Ubuntu 下,安裝 SUN Java 是一件很容易的事情。第一步:

sudo apt-get install sun-java5-jdk

  安裝完畢之后,選擇默認(rèn) java:

sudo update-alternatives --config java

  然后配置環(huán)境變量:

sudo vim /etc/environment

  在其中添加如下兩行:

CLASSPATH=/usr/lib/jvm/java-1.5.0-sun/lib
JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun

  保存退出。

  之后安裝配置 Eclipse。安裝很簡(jiǎn)單:

sudo apt-get install eclipse

雖然已經(jīng)這時(shí)新安裝的 java 已經(jīng)成為系統(tǒng)默認(rèn)的 jvm,但是 Eclipse 并不會(huì)用 update-alternative 設(shè)置的 jvm 來啟動(dòng)自身,而使用的是以前的 GNU Java。GNU Java 是 1.4.2 的實(shí)現(xiàn),而且在性能上遠(yuǎn)不如 SUN 的實(shí)現(xiàn)。為了讓 Eclipse 利用 SUN Java 啟動(dòng),我們還需要繼續(xù)配置。首先將 SUN Java 完完全全的設(shè)置為系統(tǒng)的默認(rèn) JDK:

sudo update-java-alternatives -s java-1.5.0-sun

  然后編輯 JVM 配置文件:

sudo vim /etc/jvm

  將文件中的

/usr/lib/jvm/java-1.5.0-sun

  這一行移動(dòng)到配置塊的頂部。由于 Eclipse 會(huì)忽略 Ubuntu 的通用 Java 設(shè)置(貌似一個(gè) bug),我們需要繼續(xù)編輯 Eclipse 的 java_home 文件:

sudo vim /etc/eclipse/java_home

  如同上面一樣,將

/usr/lib/jvm/java-1.5.0-sun

  這一行移動(dòng)到文件的頂部。所有的安裝配置完成之后,Ubuntu 的 Java 開發(fā)平臺(tái)就基本完備了。

posted @ 2010-01-13 22:31 chaosuper 閱讀(166) | 評(píng)論 (0)編輯 收藏

Linux內(nèi)核編譯過程詳解(kernel2.6.7)


 

花了幾天才編譯成功kernel2.6.7,其過程真可謂艱辛.古語有云:"苦盡甘來!"現(xiàn)在終于可以樂上一陣了.由于許多朋友對(duì)操作的順序及某些重要的配置知之甚少或知之不詳,往往病急亂投醫(yī).加之網(wǎng)上的信息多且煩雜,使得編譯內(nèi)核成功率不高,甚至造成原來的系統(tǒng)崩潰的也不在少數(shù).我就是其中一個(gè)。 3ws9dt X  
   'abR"  
  其實(shí),編譯內(nèi)核并不是一件難事.如果能按照正確的方法來操作,最多花上一個(gè)半小時(shí)就能搞定.是不是很受鼓舞呀! x!tem  
   Jj4f[7/@e  
  廢話少說,現(xiàn)在我們馬上開始.我原來的系統(tǒng)是redhat9.0,內(nèi)核2.4.20-8,編譯的內(nèi)核2.6.7,僅供參考. 5 I4>QT.  
   p tw5BEh  
  共分為四部分:編譯前準(zhǔn)備->編譯配置->編譯過程->運(yùn)行內(nèi)核的常見問題 Gt2#h)[ ?  
   `!Q~dHN  
  一 編譯前準(zhǔn)備 :|1ELT`f  
   1'7rm$U!._  
  1)下載一份內(nèi)核源代碼,我下的是linux-2.6.7.tar.bz2,你可在如下地址下載它或者是更新的版本. XK;4y%=HZ  
   Lx{BLbBI  
  http://kernel.org/pub/linux/kernel/v2.6/ K# %_ c:  
   (v<x)g^+X  
  2) 下載最新版本的module-init-tools( "module-init-tools-3.0.tar.gz" and "modutils-2.4.21-23.src.rpm") g"&PSm4A  
   -^`7r$q|_  
  http://www.kernel.org/pub/linux/kernel/people/rusty/modules/module-init-tools-3.0.tar.gz QAA!>\F  
   S5{J8ot  
  http://www.kernel.org/pub/linux/kernel/people/rusty/modules/modutils-2.4.21-23.src.rpm qBjR,  
   &CnT&Ko  
  3)安裝module-init-tools. 它會(huì)替代depmod [/sbin/depmod]和其他工具. ekoV7BD[  
   J/(&M#uny  
  tar -zxvf module-init-tools-3.0.tar.gz 7pL]H'd  
   v>E!/ZjHQ  
  cd module-init-tools-3.0 E,wE:o  
   (=J6CTH A  
  ./configure --prefix=/sbin V9Tiv  
   l[w)g-\Y  
  make Xl t_|lA>x  
   rV|s{mi  
  make install MFjlh  
   _(`(--je  
  ./generate-modprobe.conf /etc/modprobe.conf =[C[_4Z"&7  
   <03-|k&"  
  4)安裝modutils-2.4.21-23.src.rpm. 你可能會(huì)看到"user rusty and group rusty not existing"的警告. 沒關(guān)系,你只需強(qiáng)制安裝就是了.如果你不對(duì)Redhat 9和Redhat 8做這幾步, 你將會(huì)在"make modules_install"這一步時(shí)出現(xiàn)問題. .V9W!dqS  
   (gxes9$)i  
  rpm -i modutils-2.4.21-23.src.rpm (,f+]3r  
   cXD4 S  
  rpmbuild -bb /usr/src/redhat/SPECS/modutils.spec C-#Y  
   _E19U}  
  rpm -Fi /usr/src/redhat/RPMS/i386/modutils-2.4.21-23.i386.rpm niJ7_b   
   d2X8:Uve  
  5)解壓縮內(nèi)核源代碼.把下載的源代碼包放到目錄/usr/src下,然后 FtsIzK E  
   9 | e  
  cd /usr/src b@{gOr`I4  
   Nh#uM6!  
  tar xvfj linux-2.6.7.tar.bz2 6V;^}Yb?H  
   6O h!E z|1  
  cd linux-2.6.7 '^,kwU5  
   OM 6 Kbi  
  二 編譯配置 4r3SQxQiHj  
   kWn,Fy)r  
  在這一部分涉及幾個(gè)重要模塊的配置請(qǐng),特別注意.一般用"make menuconfig"命令來配置內(nèi)核. $02#psD   
   .Q'fP  
  輸入以上命令后出現(xiàn)一個(gè)菜單界面,用戶可以對(duì)需要的模塊.下面著重講幾個(gè)重要的配置 ')C4~Zk1.  
   Xfu>t}W  
  1)文件系統(tǒng) x.&#Ug  
   wE[~  
  請(qǐng)務(wù)必要選中ext3文件系統(tǒng), Ww{4&w%  
   1C`wXmQM  
  File systems---> 9|{s: x  
   [b|8?+  
  [*] Ext3 journalling file system support X3F/J[S  
   _ 6Pxv  
  [*] Ext3 Security Labels qAs;~9<  
   TfGO9kO  
  [*] JBD (ext3) debugging support ]*->qkpx,  
   7yINrdpR{d  
  以上三項(xiàng)一定要選上,而且要內(nèi)建(即標(biāo)*). 這個(gè)非常重要,在配置完后一定要檢查一下.config文件有沒有"CONFIG_EXT3_FS=y"這一項(xiàng). 如果不是"CONFIG_EXT3_FS=y"而是"CONFIG_EXT3_FS=m",你在運(yùn)行內(nèi)核時(shí)就會(huì)遇上以下錯(cuò)誤: pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed 3E}z  
   &zXnXx{  
  2)網(wǎng)卡驅(qū)動(dòng) n_A=8qFZX  
   :ckmHqFPa  
  請(qǐng)務(wù)必把自己網(wǎng)卡對(duì)應(yīng)的驅(qū)動(dòng)編譯進(jìn)內(nèi)核,比較普遍的網(wǎng)卡是realtek 8139,以下就是這種網(wǎng)卡的配置,以供參考 .;z&Tu  
   =3263$8'  
  Device Drivers---> /8cP1vby  
   "IAEp9_Q  
  Networking support---> a@V3?("  
   }h|=loeJ  
  Ethernet (10 or 100Mbit) ---> r7K1 ?(U\  
   $ \%2_kH  
  <*> RealTek RTL-8139 C+ PCI Fast Ethernet Adapter support (EXPERIMENTAL) > 0"$% W  
   .7~T(~uK  
  <*> RealTek RTL-8139 PCI Fast Ethernet Adapter support z^]$Wj7?  
   wu-'wBdz  
  3)聲卡驅(qū)動(dòng) Jj.MP .  
   Ay;f76  
  也要選擇自己聲卡對(duì)應(yīng)的驅(qū)動(dòng)編譯進(jìn)內(nèi)核,比較普遍的聲卡是i810_audio,以下就是這種聲卡的配置,以供參考 <s1i7X\YY  
   Tpe9=UO  
  Device Drivers ---> }&r>rM"  
   \'FxG  
  Sound ---> 3$k9GuA  
   xLyXJm E,  
  <*> Sound card support  @h;PO  
   E/~MfLI  
  Advanced Linux Sound Architecture ---> k+kYnwV~  
   p|iua-'y  
  <*> Advanced Linux Sound Architecture |O;K2  
   %-RaZ6z  
  <*> Sequencer support 4 PIj  
   2~`ssYy!#s  
  < > Sequencer dummy client #_X=:  
   $1k*V|t*  
  <*> OSS Mixer API Zd WDv`ZB0  
   ?U)J2.oz-  
  <*> OSS PCM (digital audio) API[*] OSS Sequencer API fP-8\!D  
   =%t 1m  
  <*> RTC Timer support MAGUM '\  
   ?sf4  
  PCI devices ---> ds|B o?  
   5.IdfiY  
  <*> Intel i8x0/MX440, SiS 7012; Ali 5455; NForce Audio; AMD768/8111 PI"(D >>A  
   m#Pirrd  
  Open Sound System ---> ZR yQ1-`  
   oB`OhJB  
  < > Open Sound System (DEPRECATED) !I(sd<;^N  
   L@7qd@b  
  以上三項(xiàng)配置關(guān)系到新內(nèi)核能否正常運(yùn)行,請(qǐng)備加注意.其他的配置如果不是很了解,大可以按默認(rèn)的選擇. 5N'I#j HE  
   8\B6R*O  
  三 編譯 zZaKI i0  
   PE}|j]O  
  按如下命令編譯,大概需要一個(gè)多小時(shí),大可以好好放松一下 ZX{A/N(=  
   YljRJXqC  
  make bzImage ~VuL4"N^`  
   >[Rs{(:_A  
  make modules #hkwHs3\  
   sQ@&~'O^  
  make modules_install P PyOzWC  
   (G>aeL 2  
  make install LX^[W;*`]  
   YvDG1A5J  
  運(yùn)行新內(nèi)核之前,請(qǐng)檢查一下/boot/grub/grub.conf的內(nèi)容,下面的配置可作參考 K~auYMT  
   oc |E@Y@xP  
  # grub.conf generated by anaconda ZBNWz9|0O  
   ]Y,.fg>:>  
  # <YsF!  
   Hy$:t8usu  
  # Note that you do not have to rerun grub after making changes to this file  B r$.  
   d_Zw,:~Z  
  # NOTICE: You have a /boot partition. This means that ! j8 b 7%  
   <fW9OxVy  
  # all kernel and initrd paths are relative to /boot/, eg. Cs2-tb~`  
   zHn Z'\bC  
  # root (hd0,0) g=opr``  
   Uyl9V(r6  
  # kernel /vmlinuz-version ro root=/dev/hdc3 { _h<<  
   d5^d4:jY  
  # initrd /initrd-version.img 22t&OgZ%  
   @%{ xp@m  
  #boot=/dev/hdc ^_,)Bqv^-  
   a ~_ve_LRW  
  default=1 |2ACN'1Jc  
   ;y)Qwf  
  timeout=10 W6R$u/*  
   I"[OKZ~#  
  splashimage=(hd0,0)/grub/splash.xpm.gz U!D&^oRu9  
   Ln^:+w)  
  title Red Hat Linux (2.6.7) R1 .G=(=(d  
   AlPZpN  
  root (hd0,0) 4[=v *,  
    "R5 gY  
  kernel /vmlinuz-2.6.7 ro root=LABEL=/ # Roy9v/  
   p{T :z  
  initrd /initrd-2.6.7.img d{'d?;f  
   f5Gx^^R6  
  title Red Hat Linux F}W)9>z  
   r*+:  
  root (hd0,0) ?nr35 )  
   mWRb"TT@[  
  kernel /vmlinuz-2.4.20-8 ro root=LABEL=/ c:}}=#:  
   f6O2fnK%  
  initrd /initrd-2.4.20-8.img &Sl&q]C  
   RG%  
  四 運(yùn)行內(nèi)核的常見問題 q%v'Vw'  
   7:"`4^ ;  
  1)RPM問題 53SWi:S-C  
   !a=]&|I  
  進(jìn)入編譯好的內(nèi)核后,與RPM相關(guān)的命令有些不能使用,并出現(xiàn)下列錯(cuò)誤: SXf$!  
   *=4n6O8  
  rpmdb: unable to join the environment lgmLP)7n/  
   @ ;Fapu  
  error: db4 error(11) from dbenv->open: Resource temporarily unavailable XAN&q_tLG  
   >G5R0v FJ  
  error: cannot open Packages index using db3 - Resource temporarily unavailable (11)  ##=5  
   A"~jEC= Q  
  error: cannot open Packages database in /var/lib/rpm 3evO9(_I!  
   _mF,J l  
  no packages sN/L;0z  
   )mNPNWw]  
  解決方法是執(zhí)行“export LD_ASSUME_KERNEL =2.2.25”命令,也可以將其寫入/etc/bashrc。 + =;<zt6t  
   y)j$6M$9L2  
  2)Sound問題 8 9}jlF^(  
   >Ud[  
  聲音部分的模塊名也改變了。我的筆記本原來的聲卡驅(qū)動(dòng)是i810_audio,現(xiàn)在已改為snd-intel8x0。因此需要把下面的內(nèi)容添加到/etc/modprobe.conf中: >+;a3};*C4  
   )4< ng;  
  alias char-major-14 soundcore \`u@7J  
   =mn&YipF  
  alias sound snd-intel8x0 <v]3i%E  
   [nd-uN  
  alias sound-slot-0 snd-intel8x0 _NrCGtY6  
   gx@{D=X 8  
  alias snd-card-0 snd-intel8x0 /UfYn~t'c  
   --~H!HMoSQ  
  alias sound-service-0-0 snd-mixer-oss } {62GSVI  
   m 0<6 p7  
  alias sound-service-0-1 snd-seq-oss =zRV}6@5  
   H1QZ5RIv#  
  alias sound-service-0-3 snd-pcm-oss |GCdxtR$j  
   2`]C6 '  
  alias sound-service-0-8 snd-seq-oss :=.,V+e!i{  
   Q`s?UB\7p  
  alias sound-service-0-12 snd-pcm-oss 55#s<,O  
   V-/!A((c  
  install snd-intel8x0 /sbin/modprobe --ignore-install sound-slot-0 && @%>2 {+8  
   U\V)`eaNu  
  { /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1; /bin/true; } QOCe4C-x|p  
   E5d/8-  
  remove snd-intel8x0 #{2$',  
   ~@ D10r%  
  { /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1; /bin/true; }; zj7+Ac/[  
   }^yu^rTY  
  /sbin/modprobe -r --ignore-remove sound-slot-0 [)M;sHE46  
   x'"~NX i  
  然后執(zhí)行“modprobe sound”加載聲音模塊,并使用下列命令檢驗(yàn)聲卡驅(qū)動(dòng): kU=S?G=  
   n%x0t!JU  
  #cat /proc/asound/cards Y. 7V/t6  
   );Y>OV  
  顯示結(jié)果如下: > HzXf C  
   -#v,T$ae   
  0 [SI7012]: ICH - SiS SI7012 .[p_ '2gi  
   :]Z6e1Fia#  
  SiS SI7012 at 0xdc00, irq 11 !-fWtA~  
   DXM_PP>w$a  
  3)VMware問題 ; T@]:v #I  
   #f=F:"#H  
  解決方法是: ?ZHPOO%.  
   dh^,(  
  ◆ 將/usr/bin/vmware-config.pl中所有的“/proc/ksyms”替換為“/proc/kallsyms”。使用“sed”命令可以達(dá)到這個(gè)目的。 n9 =Ht  
   +J\.?Lv,]  
  ◆ 重新運(yùn)行該腳本,使用內(nèi)核頭文件編譯新的內(nèi)核模塊。在編譯過程中如發(fā)生錯(cuò)誤,應(yīng)該進(jìn)入/usr/lib/vmware/modules/source,使用下面的命令將vmnet.tar解包: 8rvNx~  
   {<=owK4?  
  #tar xvf vmnet.tar g(xuC@6.  
   itiX'ft  
  ◆ 進(jìn)入vmnet-only目錄修改bridge.c文件。將“atomic_add(skb->truesize, &sk->wmem_alloc);”修改為“atomic_add(skb->truesize, &sk->sk_wmem_alloc);”,并用類似的方式將“protinfo”改為“sk_protinfo”。 <z=06+-A#I  
   7,G2Q8_  
  ◆ 再次把vmnet-only目錄用下面的命令重新打包為vmmon.tar: O'-)BY&-u  
   t.OU7b^:|  
  #tar cvf vmmon.tar v
posted @ 2009-12-12 14:36 chaosuper 閱讀(168) | 評(píng)論 (0)編輯 收藏

30而立,對(duì)于大多數(shù)的中國(guó)男人來說,30歲是道坎,邁過這一步是成功,退后一步是懸崖,必須向前的時(shí)候,只能向前,而不是選擇后退。所以,30歲的男人最有壓力,面對(duì)生活、工作、學(xué)習(xí),每時(shí)每刻都要提醒自己,該做什么,不該做什么,什么可以做,什么又不可以做,都要清醒。同樣,也必須明白很多事。

1、要知道,眼睛一閉一睜,一天就過去了。

時(shí)間不停流,總是在不停的前行,所以,要懂得只爭(zhēng)朝夕,真正從內(nèi)心里明白眼睛一閉一睜的概念,好好的度過每一天,而不是碌碌無為的不知道為誰而活,也不知道自己想要干些什么。

2、要明白,最愛的人是誰,要好好的去愛。

一定要明白,誰是你最愛的人,誰是最愛你的人,要好好的理解愛,用心的去愛,讓愛充滿陽光,同樣溫暖你生活的每個(gè)瞬間,只有這樣,你的幸福指數(shù)才會(huì)最高,最令人羨慕。

3、要知道,最重要的責(zé)任,要用心去生活。

要記得,人生最重要的不是掙錢,而是有責(zé)任,對(duì)身邊的人要負(fù)責(zé),對(duì)生活要負(fù)責(zé),對(duì)工作要負(fù)責(zé),責(zé)任意識(shí)讓自己學(xué)著慢慢成熟,同樣也可以改變一個(gè)人的理想和信念,讓大家得到肯定。

4、要明白,不斷的學(xué)習(xí),讓自己逐步提高。

活到老,學(xué)到老。總理說的沒有錯(cuò)。人生苦短,但一定不要忘記學(xué)習(xí),畢竟,在學(xué)習(xí)中不斷的提高自己,才可以獲得更大的成功。相信這一點(diǎn),比什么都重要。

5、要知道,思考非常重要,學(xué)會(huì)改變自己。

要不斷的去思考,發(fā)現(xiàn)問題及時(shí)解決問題,并在發(fā)現(xiàn)問題和解決問題的時(shí)候?qū)W會(huì)改變自己,讓自己去適應(yīng)社會(huì)和團(tuán)隊(duì)的發(fā)展,當(dāng)然,適應(yīng)并不是放棄自己主觀能動(dòng)性。

6、要明白,錢不是第一位,愛才是第一位。

有錢可以提高生活質(zhì)量,但并不是提高愛的質(zhì)量,愛是第一位的,錢不是第一位,只有充滿愛的生活,錢才更有價(jià)值,沒有了愛,有再多的錢一點(diǎn)用都沒有,全是自私和永不滿足的欲望而已。

7、要知道,逆境不可怕,可怕的是失去信心。

順境中發(fā)揮出自己應(yīng)有的能力當(dāng)然重要,但更重要的是在逆境中學(xué)會(huì)堅(jiān)強(qiáng)的面對(duì)現(xiàn)實(shí),只有這樣,才會(huì)更有信心的去堅(jiān)持自己的理想,相信自己,什么都不可怕。

8、要明白,有份事業(yè),為自己的所愛而奮斗。

要知道自己最需要什么,什么最適合自己,也許,在很多次艱難的決擇中,會(huì)發(fā)現(xiàn)自己最需要的是什么,朝著自己的目標(biāo)去奮斗,相信會(huì)有成功的那一天。

9、要明白,健康是第一位,要學(xué)會(huì)多運(yùn)動(dòng)。

多多的運(yùn)動(dòng),保持一個(gè)好的身體狀態(tài),身體是革命的本錢,只有保證在健康的前提下,一切理想才可以去談,所以不要總是自以為是,科學(xué)合理的運(yùn)動(dòng),健康第一位。

10、要知道,眼睛一閉不睜,一輩子就過去了。

理解這句話的真正用意,就是不要太去計(jì)較得與失,要勇敢的面對(duì)現(xiàn)實(shí),要學(xué)會(huì)理解和寬容,要學(xué)會(huì)放棄,要懂得舍得的意思,活的開開心心的最重要,有個(gè)好的心態(tài),一輩子才活的有意義。

posted @ 2009-10-30 23:29 chaosuper 閱讀(152) | 評(píng)論 (0)編輯 收藏

 1,事業(yè)永遠(yuǎn)第一

  雖然金錢不是萬能的,但沒有錢是萬萬不能的,雖然這句話很俗,但絕對(duì)有道理,所以30歲之前,請(qǐng)把你大部分精力放在你的事業(yè)上。

  2,別把錢看得太重

  不要抱怨自己現(xiàn)在工資低,銀行存款4位數(shù)以下,看不到前途,現(xiàn)在要做的就是努力學(xué)習(xí),即使你文憑再高,怎么把理論運(yùn)用到實(shí)踐還是需要一個(gè)很長(zhǎng)的鍛煉過程,社會(huì)永遠(yuǎn)是一所最博大的大學(xué),它讓你學(xué)到的知識(shí)遠(yuǎn)比你在學(xué)校學(xué)到的重要得多,所以同樣,你也別太介意學(xué)歷低.30歲之前靠自己能力買車買房的人還是極少。

  3,學(xué)會(huì)體諒父母

  別嫌他們嘮叨,等你為人父了你就知道可憐天下父母心,在他們眼里你還是個(gè)孩子,但他們真的老了,現(xiàn)在得你哄他們開心了,也許只要你的一個(gè)電話,一點(diǎn)小禮物,就可以讓他們安心,很容易做到。

  4,交上好朋友

  朋友對(duì)你一生都影響重大,不要去結(jié)識(shí)太多酒肉朋友,至少得有一個(gè)能在關(guān)鍵時(shí)刻幫助你的朋友,如果遇到這么一個(gè)人,就好好把握,日后必定有用,不管他現(xiàn)在是富還是窮。

5,別太相信愛情

  心中要有愛,但請(qǐng)別說也別相信那些瓊瑤阿姨小說里面的山盟海誓,世上本無永恒,重要的是責(zé)任,但女人心海底針,心變了,一切都成枉然,你要做的就是該出手時(shí)就出手,該放手時(shí)別猶豫.30歲之前的愛情不是假的,但只是大多數(shù)人都沒有能真正把握好的能力,所以學(xué)會(huì)量力而行。

  6,別擔(dān)心至今還保留初吻

  愛情不在多而在精,別以為自己20多歲還沒碰過女孩子就害怕自己永遠(yuǎn)找不到老婆.以后你會(huì)有很多機(jī)會(huì)認(rèn)識(shí)女孩子,要知道這個(gè)社會(huì)雖然男人多于女人,但現(xiàn)實(shí)是女人其實(shí)比男人更擔(dān)心這個(gè)問題.男人30一枝花,你在升值而不是貶值,成熟的愛情往往更美麗更長(zhǎng)久,所以不要像瘋狗一樣看到女孩就想追,學(xué)會(huì)品味寂寞。

  7,不要沉迷于任何東西

  所謂玩物而喪志,網(wǎng)絡(luò)游戲是你在出校門之前玩的,你現(xiàn)在沒有多余的時(shí)間和精力花費(fèi)到這上面,否則你透支的東西以后都得償還.一個(gè)人要有興趣,愛好,但請(qǐng)分清楚輕重。

  8,年輕沒有失敗

  不要遇到挫折就灰心,年輕人要時(shí)刻保持積極向上的態(tài)度.失敗了,重來過;失去了,再爭(zhēng)取別的。錯(cuò)過了,要分析,下次來,要把握;幼稚了,下次,成熟點(diǎn)。不要緊,會(huì)好的,哪怕到了極點(diǎn),也不要放棄,相信一定可以挺過去。不要消極,會(huì)好的。曾經(jīng)的錯(cuò),過去了,總不能回味在過去。現(xiàn)在的,很好,累完了,很舒服。不要傷,總會(huì)有人在支撐你。

9,不要輕易崇拜或者鄙視一個(gè)人

  人都有偶像,但請(qǐng)擁有你自己的個(gè)性.不要刻意去模仿一個(gè)人,因?yàn)槟憔褪悄?是唯一的,獨(dú)一無二的,要有自信.也不要全盤否定一個(gè)人,每個(gè)人是有價(jià)值的,如果你不能理解他,也請(qǐng)學(xué)會(huì)接受。

  10,要有責(zé)任心.

  不管你曾經(jīng)怎樣,但請(qǐng)從現(xiàn)在開始做一個(gè)正直的人.男人要有責(zé)任心,無論是工作還是生活上,一個(gè)有責(zé)任心的人才能讓別人有安全感,才能讓別人覺得你是一個(gè)值得信賴的人.我們不要懦弱,但請(qǐng)不要傷害愛你的人和你愛的人,尤其是善良的女孩,因?yàn)檫@個(gè)世界善良的女孩不多了,即使不想擁有,但也請(qǐng)讓她保持她美麗的心。

  11,男人的外貌并不重要.

  不要為自己的長(zhǎng)相身高而過分擔(dān)心,一個(gè)心地善良,為人正直的男人遠(yuǎn)比那些空有英俊相貌,挺拔身材但內(nèi)心齷齪的男人要帥得多.如果有人以貌取人,請(qǐng)不要太在意,因?yàn)槟悴挥萌橐粋€(gè)低級(jí)趣味的人而難過。

  12,學(xué)會(huì)保護(hù)身體

  不要以為現(xiàn)在抽煙喝酒,熬夜通宵也沒什么事.那是因?yàn)槟愕纳眢w正處于你一生的黃金時(shí)段.30歲以后你就能明白力不從心這個(gè)詞的意義了,身體是革命的本錢,沒有好的身體什么也做不了,所以要盡量讓自己過有規(guī)律的健康生活。

13,別覺得一事無成.

  你現(xiàn)在還沒有資格談成功,當(dāng)然如果你有千萬資產(chǎn)的除外.一開始太固定的職業(yè)并不一定是好事,或許在不斷的改行當(dāng)中,你會(huì)學(xué)到更豐富的知識(shí),而且可以挖掘出自己的潛能,找到最適合你的工作。

  14,請(qǐng)認(rèn)真工作

  即使你現(xiàn)在的工作再怎么無聊再怎么低級(jí),也請(qǐng)你認(rèn)真去對(duì)待,要知道任何成功人士都是從最小的事做起,或許你現(xiàn)在學(xué)不到多么了不起的知識(shí),但起碼你要學(xué)會(huì)良好的工作態(tài)度和工作方法,這對(duì)以后很重要。

  15,請(qǐng)認(rèn)真對(duì)待感情.

  不要羨慕那些換女人像換鞋一樣的花花公子,逢場(chǎng)作戲的愛情只是讓你浪費(fèi)時(shí)間浪費(fèi)精力,一個(gè)人最痛苦的不是找不到愛人,而是心中沒有了愛,當(dāng)你把我愛你3 個(gè)字變成你最容易說的一句話時(shí),那么你在愛情的世界里已經(jīng)很難找到真正的幸福了.愛情沒有公平,總有一個(gè)人比對(duì)方付出得多,即使沒有結(jié)果,也別覺得不值, 因?yàn)槟愕母冻霾还馐菫榱怂?也是為了你自己的愛,為愛付出是很可貴的,贊自己一下。

  16.請(qǐng)留一點(diǎn)童心

  在內(nèi)心深處,哪怕只是一個(gè)很小的角落里,請(qǐng)保持一份童心,不是幼稚,但有的時(shí)候單純一點(diǎn)會(huì)讓你很快樂.所以不要太計(jì)較得失,生活本無完美。

posted @ 2009-10-30 23:17 chaosuper 閱讀(95) | 評(píng)論 (0)編輯 收藏

一、引言

  計(jì)算機(jī)的出現(xiàn)使得很多原本十分繁瑣的工作得以大幅度簡(jiǎn)化,但是也有一些在人們直觀看來很容易的問題卻需要拿出一套并不簡(jiǎn)單的通用解決方案,比如幾何問題。作為計(jì)算機(jī)科學(xué)的一個(gè)分支,計(jì)算幾何主要研究解決幾何問題的算法。在現(xiàn)代工程和數(shù)學(xué)領(lǐng)域,計(jì)算幾何在圖形學(xué)、機(jī)器人技術(shù)、超大規(guī)模集成電路設(shè)計(jì)和統(tǒng)計(jì)等諸多領(lǐng)域有著十分重要的應(yīng)用。在本文中,我們將對(duì)計(jì)算幾何常用的基本算法做一個(gè)全面的介紹,希望對(duì)您了解并應(yīng)用計(jì)算幾何的知識(shí)解決問題起到幫助。

二、目錄

  本文整理的計(jì)算幾何基本概念和常用算法包括如下內(nèi)容:

  矢量的概念

  矢量加減法

  矢量叉積

  折線段的拐向判斷

  判斷點(diǎn)是否在線段上

  判斷兩線段是否相交

  判斷線段和直線是否相交

  判斷矩形是否包含點(diǎn)

  判斷線段、折線、多邊形是否在矩形中

  判斷矩形是否在矩形中

  判斷圓是否在矩形中

  判斷點(diǎn)是否在多邊形中

  判斷線段是否在多邊形內(nèi)

  判斷折線是否在多邊形內(nèi)

  判斷多邊形是否在多邊形內(nèi)

  判斷矩形是否在多邊形內(nèi)

  判斷圓是否在多邊形內(nèi)

  判斷點(diǎn)是否在圓內(nèi)

  判斷線段、折線、矩形、多邊形是否在圓內(nèi)

  判斷圓是否在圓內(nèi)

  計(jì)算點(diǎn)到線段的最近點(diǎn)

  計(jì)算點(diǎn)到折線、矩形、多邊形的最近點(diǎn)

  計(jì)算點(diǎn)到圓的最近距離及交點(diǎn)坐標(biāo)

  計(jì)算兩條共線的線段的交點(diǎn)

  計(jì)算線段或直線與線段的交點(diǎn)

  求線段或直線與折線、矩形、多邊形的交點(diǎn)

  求線段或直線與圓的交點(diǎn)

  凸包的概念

  凸包的求法

三、算法介紹

  矢量的概念

  如果一條線段的端點(diǎn)是有次序之分的,我們把這種線段成為有向線段(directed segment)。如果有向線段p1p2的起點(diǎn)p1在坐標(biāo)原點(diǎn),我們可以把它稱為矢量(vector)p2。

  矢量加減法

  設(shè)二維矢量P = ( x1, y1 ),Q = ( x2 , y2 ),則矢量加法定義為: P + Q = ( x1 + x2 , y1 + y2 ),同樣的,矢量減法定義為: P - Q = ( x1 - x2 , y1 - y2 )。顯然有性質(zhì) P + Q = Q + P,P - Q = - ( Q - P )。

  矢量叉積

  計(jì)算矢量叉積是與直線和線段相關(guān)算法的核心部分。設(shè)矢量P = ( x1, y1 ),Q = ( x2, y2 ),則矢量叉積定義為由(0,0)、p1、p2和p1+p2所組成的平行四邊形的帶符號(hào)的面積,即:P × Q = x1*y2 - x2*y1,其結(jié)果是一個(gè)標(biāo)量。顯然有性質(zhì) P × Q = - ( Q × P ) 和 P × ( - Q ) = - ( P × Q )。一般在不加說明的情況下,本文下述算法中所有的點(diǎn)都看作矢量,兩點(diǎn)的加減法就是矢量相加減,而點(diǎn)的乘法則看作矢量叉積。

  叉積的一個(gè)非常重要性質(zhì)是可以通過它的符號(hào)判斷兩矢量相互之間的順逆時(shí)針關(guān)系:

  若 P × Q > 0 , 則P在Q的順時(shí)針方向。
  若 P × Q < 0 , 則P在Q的逆時(shí)針方向。
  若 P × Q = 0 , 則P與Q共線,但可能同向也可能反向。

  折線段的拐向判斷

  折線段的拐向判斷方法可以直接由矢量叉積的性質(zhì)推出。對(duì)于有公共端點(diǎn)的線段p0p1和p1p2,通過計(jì)算(p2 - p0) × (p1 - p0)的符號(hào)便可以確定折線段的拐向:

  若(p2 - p0) × (p1 - p0) > 0,則p0p1在p1點(diǎn)拐向右側(cè)后得到p1p2。

  若(p2 - p0) × (p1 - p0) < 0,則p0p1在p1點(diǎn)拐向左側(cè)后得到p1p2。

  若(p2 - p0) × (p1 - p0) = 0,則p0、p1、p2三點(diǎn)共線。

  具體情況可參照下圖:

   

  判斷點(diǎn)是否在線段上

  設(shè)點(diǎn)為Q,線段為P1P2 ,判斷點(diǎn)Q在該線段上的依據(jù)是:( Q - P1 ) × ( P2 - P1 ) = 0 且 Q 在以 P1,P2為對(duì)角頂點(diǎn)的矩形內(nèi)。前者保證Q點(diǎn)在直線P1P2上,后者是保證Q點(diǎn)不在線段P1P2的延長(zhǎng)線或反向延長(zhǎng)線上,對(duì)于這一步驟的判斷可以用以下過程實(shí)現(xiàn):

  ON-SEGMENT(pi,pj,pk)

  if min(xi,xj) <= xk <= max(xi,xj) and min(yi,yj) <= yk <= max(yi,yj)

  then return true;

  else return false;

  特別要注意的是,由于需要考慮水平線段和垂直線段兩種特殊情況,min(xi,xj)<=xk<=max(xi,xj)和min(yi,yj)<=yk<=max(yi,yj)兩個(gè)條件必須同時(shí)滿足才能返回真值。

  判斷兩線段是否相交

  我們分兩步確定兩條線段是否相交:

  (1)快速排斥試驗(yàn)

    設(shè)以線段 P1P2 為對(duì)角線的矩形為R, 設(shè)以線段 Q1Q2 為對(duì)角線的矩形為T,如果R和T不相交,顯然兩線段不會(huì)相交。

  (2)跨立試驗(yàn)

    如果兩線段相交,則兩線段必然相互跨立對(duì)方。若P1P2跨立Q1Q2 ,則矢量 ( P1 - Q1 ) 和( P2 - Q1 )位于矢量( Q2 - Q1 ) 的兩側(cè),即( P1 - Q1 ) × ( Q2 - Q1 ) * ( P2 - Q1 ) × ( Q2 - Q1 ) < 0。上式可改寫成( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) > 0。當(dāng) ( P1 - Q1 ) × ( Q2 - Q1 ) = 0 時(shí),說明 ( P1 - Q1 ) 和 ( Q2 - Q1 )共線,但是因?yàn)橐呀?jīng)通過快速排斥試驗(yàn),所以 P1 一定在線段 Q1Q2上;同理,( Q2 - Q1 ) ×(P2 - Q1 ) = 0 說明 P2 一定在線段 Q1Q2上。所以判斷P1P2跨立Q1Q2的依據(jù)是:( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) >= 0。同理判斷Q1Q2跨立P1P2的依據(jù)是:( Q1 - P1 ) × ( P2 - P1 ) * ( P2 - P1 ) × ( Q2 - P1 ) >= 0。具體情況如下圖所示:

   

  在相同的原理下,對(duì)此算法的具體的實(shí)現(xiàn)細(xì)節(jié)可能會(huì)與此有所不同,除了這種過程外,大家也可以參考《算法導(dǎo)論》上的實(shí)現(xiàn)。

  判斷線段和直線是否相交

  有了上面的基礎(chǔ),這個(gè)算法就很容易了。如果線段P1P2和直線Q1Q2相交,則P1P2跨立Q1Q2,即:( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) >= 0。

  判斷矩形是否包含點(diǎn)

  只要判斷該點(diǎn)的橫坐標(biāo)和縱坐標(biāo)是否夾在矩形的左右邊和上下邊之間。

    
  判斷線段、折線、多邊形是否在矩形中

  因?yàn)榫匦问莻€(gè)凸集,所以只要判斷所有端點(diǎn)是否都在矩形中就可以了。

  判斷矩形是否在矩形中

  只要比較左右邊界和上下邊界就可以了。

  判斷圓是否在矩形中

  很容易證明,圓在矩形中的充要條件是:圓心在矩形中且圓的半徑小于等于圓心到矩形四邊的距離的最小值。

  判斷點(diǎn)是否在多邊形中

  判斷點(diǎn)P是否在多邊形中是計(jì)算幾何中一個(gè)非常基本但是十分重要的算法。以點(diǎn)P為端點(diǎn),向左方作射線L,由于多邊形是有界的,所以射線L的左端一定在多邊形外,考慮沿著L從無窮遠(yuǎn)處開始自左向右移動(dòng),遇到和多邊形的第一個(gè)交點(diǎn)的時(shí)候,進(jìn)入到了多邊形的內(nèi)部,遇到第二個(gè)交點(diǎn)的時(shí)候,離開了多邊形,……所以很容易看出當(dāng)L和多邊形的交點(diǎn)數(shù)目C是奇數(shù)的時(shí)候,P在多邊形內(nèi),是偶數(shù)的話P在多邊形外。

  但是有些特殊情況要加以考慮。如圖下圖(a)(b)(c)(d)所示。在圖(a)中,L和多邊形的頂點(diǎn)相交,這時(shí)候交點(diǎn)只能計(jì)算一個(gè);在圖(b)中,L和多邊形頂點(diǎn)的交點(diǎn)不應(yīng)被計(jì)算;在圖(c)和(d) 中,L和多邊形的一條邊重合,這條邊應(yīng)該被忽略不計(jì)。如果L和多邊形的一條邊重合,這條邊應(yīng)該被忽略不計(jì)。

    

  為了統(tǒng)一起見,我們?cè)谟?jì)算射線L和多邊形的交點(diǎn)的時(shí)候,1。對(duì)于多邊形的水平邊不作考慮;2。對(duì)于多邊形的頂點(diǎn)和L相交的情況,如果該頂點(diǎn)是其所屬的邊上縱坐標(biāo)較大的頂點(diǎn),則計(jì)數(shù),否則忽略;3。對(duì)于P在多邊形邊上的情形,直接可判斷P屬于多邊行。由此得出算法的偽代碼如下:

    count ← 0;
    以P為端點(diǎn),作從右向左的射線L; 
    for 多邊形的每條邊s
     do if P在邊s上 
          then return true;
        if s不是水平的
          then if s的一個(gè)端點(diǎn)在L上
                 if 該端點(diǎn)是s兩端點(diǎn)中縱坐標(biāo)較大的端點(diǎn)
                   then count ← count+1
               else if s和L相交
                 then count ← count+1;
    if count mod 2 = 1 
      then return true;
    else return false;



  其中做射線L的方法是:設(shè)P'的縱坐標(biāo)和P相同,橫坐標(biāo)為正無窮大(很大的一個(gè)正數(shù)),則P和P'就確定了射線L。

  判斷點(diǎn)是否在多邊形中的這個(gè)算法的時(shí)間復(fù)雜度為O(n)。

  另外還有一種算法是用帶符號(hào)的三角形面積之和與多邊形面積進(jìn)行比較,這種算法由于使用浮點(diǎn)數(shù)運(yùn)算所以會(huì)帶來一定誤差,不推薦大家使用。

  判斷線段是否在多邊形內(nèi)

  線段在多邊形內(nèi)的一個(gè)必要條件是線段的兩個(gè)端點(diǎn)都在多邊形內(nèi),但由于多邊形可能為凹,所以這不能成為判斷的充分條件。如果線段和多邊形的某條邊內(nèi)交(兩線段內(nèi)交是指兩線段相交且交點(diǎn)不在兩線段的端點(diǎn)),因?yàn)槎噙呅蔚倪叺淖笥覂蓚?cè)分屬多邊形內(nèi)外不同部分,所以線段一定會(huì)有一部分在多邊形外(見圖a)。于是我們得到線段在多邊形內(nèi)的第二個(gè)必要條件:線段和多邊形的所有邊都不內(nèi)交。

  線段和多邊形交于線段的兩端點(diǎn)并不會(huì)影響線段是否在多邊形內(nèi);但是如果多邊形的某個(gè)頂點(diǎn)和線段相交,還必須判斷兩相鄰交點(diǎn)之間的線段是否包含于多邊形內(nèi)部(反例見圖b)。

   

  因此我們可以先求出所有和線段相交的多邊形的頂點(diǎn),然后按照X-Y坐標(biāo)排序(X坐標(biāo)小的排在前面,對(duì)于X坐標(biāo)相同的點(diǎn),Y坐標(biāo)小的排在前面,這種排序準(zhǔn)則也是為了保證水平和垂直情況的判斷正確),這樣相鄰的兩個(gè)點(diǎn)就是在線段上相鄰的兩交點(diǎn),如果任意相鄰兩點(diǎn)的中點(diǎn)也在多邊形內(nèi),則該線段一定在多邊形內(nèi)。

  證明如下:
 

  命題1:
    如果線段和多邊形的兩相鄰交點(diǎn)P1 ,P2的中點(diǎn)P' 也在多邊形內(nèi),則P1, P2之間的所有點(diǎn)都在多邊形內(nèi)。
    

  證明:
    假設(shè)P1,P2之間含有不在多邊形內(nèi)的點(diǎn),不妨設(shè)該點(diǎn)為Q,在P1, P'之間,因?yàn)槎噙呅问情]合曲線,所以其內(nèi)外部之間有界,而P1屬于多邊行內(nèi)部,Q屬于多邊性外部,P'屬于多邊性內(nèi)部,P1-Q-P'完全連續(xù),所以P1Q和QP'一定跨越多邊形的邊界,因此在P1,P'之間至少還有兩個(gè)該線段和多邊形的交點(diǎn),這和P1P2是相鄰兩交點(diǎn)矛盾,故命題成立。證畢。

  由命題1直接可得出推論:
  推論2:
    設(shè)多邊形和線段PQ的交點(diǎn)依次為P1,P2,……Pn,其中Pi和Pi+1是相鄰兩交點(diǎn),線段PQ在多邊形內(nèi)的充要條件是:P,Q在多邊形內(nèi)且對(duì)于i =1, 2,……, n-1,Pi ,Pi+1的中點(diǎn)也在多邊形內(nèi)。

  在實(shí)際編程中,沒有必要計(jì)算所有的交點(diǎn),首先應(yīng)判斷線段和多邊形的邊是否內(nèi)交,倘若線段和多邊形的某條邊內(nèi)交則線段一定在多邊形外;如果線段和多邊形的每一條邊都不內(nèi)交,則線段和多邊形的交點(diǎn)一定是線段的端點(diǎn)或者多邊形的頂點(diǎn),只要判斷點(diǎn)是否在線段上就可以了。

  至此我們得出算法如下:

    if 線端PQ的端點(diǎn)不都在多邊形內(nèi) 
      then return false;
    點(diǎn)集pointSet初始化為空;
    for 多邊形的每條邊s
      do if 線段的某個(gè)端點(diǎn)在s上
           then 將該端點(diǎn)加入pointSet;
         else if s的某個(gè)端點(diǎn)在線段PQ上
           then 將該端點(diǎn)加入pointSet;
         else if s和線段PQ相交 // 這時(shí)候已經(jīng)可以肯定是內(nèi)交了
           then return false;
    將pointSet中的點(diǎn)按照X-Y坐標(biāo)排序;
    for pointSet中每?jī)蓚€(gè)相鄰點(diǎn) pointSet[i] , pointSet[ i+1]
      do if pointSet[i] , pointSet[ i+1] 的中點(diǎn)不在多邊形中
           then return false;
    return true;


  這個(gè)過程中的排序因?yàn)榻稽c(diǎn)數(shù)目肯定遠(yuǎn)小于多邊形的頂點(diǎn)數(shù)目n,所以最多是常數(shù)級(jí)的復(fù)雜度,幾乎可以忽略不計(jì)。因此算法的時(shí)間復(fù)雜度也是O(n)。

  判斷折線是否在多邊形內(nèi)

  只要判斷折線的每條線段是否都在多邊形內(nèi)即可。設(shè)折線有m條線段,多邊形有n個(gè)頂點(diǎn),則該算法的時(shí)間復(fù)雜度為O(m*n)。

  判斷多邊形是否在多邊形內(nèi)

  只要判斷多邊形的每條邊是否都在多邊形內(nèi)即可。判斷一個(gè)有m個(gè)頂點(diǎn)的多邊形是否在一個(gè)有n個(gè)頂點(diǎn)的多邊形內(nèi)復(fù)雜度為O(m*n)。

  判斷矩形是否在多邊形內(nèi)

  將矩形轉(zhuǎn)化為多邊形,然后再判斷是否在多邊形內(nèi)。

  判斷圓是否在多邊形內(nèi)

  只要計(jì)算圓心到多邊形的每條邊的最短距離,如果該距離大于等于圓半徑則該圓在多邊形內(nèi)。計(jì)算圓心到多邊形每條邊最短距離的算法在后文闡述。

  判斷點(diǎn)是否在圓內(nèi)

  計(jì)算圓心到該點(diǎn)的距離,如果小于等于半徑則該點(diǎn)在圓內(nèi)。

  判斷線段、折線、矩形、多邊形是否在圓內(nèi)

  因?yàn)閳A是凸集,所以只要判斷是否每個(gè)頂點(diǎn)都在圓內(nèi)即可。

  判斷圓是否在圓內(nèi)

  設(shè)兩圓為O1,O2,半徑分別為r1, r2,要判斷O2是否在O1內(nèi)。先比較r1,r2的大小,如果r1<r2則O2不可能在O1內(nèi);否則如果兩圓心的距離大于r1 - r2 ,則O2不在O1內(nèi);否則O2在O1內(nèi)。

  計(jì)算點(diǎn)到線段的最近點(diǎn)

  如果該線段平行于X軸(Y軸),則過點(diǎn)point作該線段所在直線的垂線,垂足很容易求得,然后計(jì)算出垂足,如果垂足在線段上則返回垂足,否則返回離垂足近的端點(diǎn);如果該線段不平行于X軸也不平行于Y軸,則斜率存在且不為0。設(shè)線段的兩端點(diǎn)為pt1和pt2,斜率為:k = ( pt2.y - pt1. y ) / (pt2.x - pt1.x );該直線方程為:y = k* ( x - pt1.x) + pt1.y。其垂線的斜率為 - 1 / k,垂線方程為:y = (-1/k) * (x - point.x) + point.y 。

  聯(lián)立兩直線方程解得:x = ( k^2 * pt1.x + k * (point.y - pt1.y ) + point.x ) / ( k^2 + 1) ,y = k * ( x - pt1.x) + pt1.y;然后再判斷垂足是否在線段上,如果在線段上則返回垂足;如果不在則計(jì)算兩端點(diǎn)到垂足的距離,選擇距離垂足較近的端點(diǎn)返回。

  計(jì)算點(diǎn)到折線、矩形、多邊形的最近點(diǎn)

  只要分別計(jì)算點(diǎn)到每條線段的最近點(diǎn),記錄最近距離,取其中最近距離最小的點(diǎn)即可。

  計(jì)算點(diǎn)到圓的最近距離及交點(diǎn)坐標(biāo)

  如果該點(diǎn)在圓心,因?yàn)閳A心到圓周任一點(diǎn)的距離相等,返回UNDEFINED。

  連接點(diǎn)P和圓心O,如果PO平行于X軸,則根據(jù)P在O的左邊還是右邊計(jì)算出最近點(diǎn)的橫坐標(biāo)為centerPoint.x - radius 或 centerPoint.x + radius。如果PO平行于Y軸,則根據(jù)P在O的上邊還是下邊計(jì)算出最近點(diǎn)的縱坐標(biāo)為 centerPoint.y -+radius或 centerPoint.y - radius。如果PO不平行于X軸和Y軸,則PO的斜率存在且不為0,這時(shí)直線PO斜率為k = ( P.y - O.y )/ ( P.x - O.x )。直線PO的方程為:y = k * ( x - P.x) + P.y。設(shè)圓方程為:(x - O.x ) ^2 + ( y - O.y ) ^2 = r ^2,聯(lián)立兩方程組可以解出直線PO和圓的交點(diǎn),取其中離P點(diǎn)較近的交點(diǎn)即可。

  計(jì)算兩條共線的線段的交點(diǎn)

  對(duì)于兩條共線的線段,它們之間的位置關(guān)系有下圖所示的幾種情況。圖(a)中兩條線段沒有交點(diǎn);圖 (b) 和 (d) 中兩條線段有無窮焦點(diǎn);圖 (c) 中兩條線段有一個(gè)交點(diǎn)。設(shè)line1是兩條線段中較長(zhǎng)的一條,line2是較短的一條,如果line1包含了line2的兩個(gè)端點(diǎn),則是圖(d)的情況,兩線段有無窮交點(diǎn);如果line1只包含line2的一個(gè)端點(diǎn),那么如果line1的某個(gè)端點(diǎn)等于被line1包含的line2的那個(gè)端點(diǎn),則是圖(c)的情況,這時(shí)兩線段只有一個(gè)交點(diǎn),否則就是圖(b)的情況,兩線段也是有無窮的交點(diǎn);如果line1不包含line2的任何端點(diǎn),則是圖(a)的情況,這時(shí)兩線段沒有交點(diǎn)。

  計(jì)算線段或直線與線段的交點(diǎn):

  設(shè)一條線段為L(zhǎng)0 = P1P2,另一條線段或直線為L(zhǎng)1 = Q1Q2 ,要計(jì)算的就是L0和L1的交點(diǎn)。

 1. 首先判斷L0和L1是否相交(方法已在前文討論過),如果不相交則沒有交點(diǎn),否則說明L0和L1一定有交點(diǎn),下面就將L0和L1都看作直線來考慮。

 2. 如果P1和P2橫坐標(biāo)相同,即L0平行于Y軸

  a) 若L1也平行于Y軸,

    i. 若P1的縱坐標(biāo)和Q1的縱坐標(biāo)相同,說明L0和L1共線,假如L1是直線的話他們有無窮的交點(diǎn),假如L1是線段的話可用"計(jì)算兩條共線線段的交點(diǎn)"的算法求他們的交點(diǎn)(該方法在前文已討論過);
    ii. 否則說明L0和L1平行,他們沒有交點(diǎn);

  b) 若L1不平行于Y軸,則交點(diǎn)橫坐標(biāo)為P1的橫坐標(biāo),代入到L1的直線方程中可以計(jì)算出交點(diǎn)縱坐標(biāo);

 3. 如果P1和P2橫坐標(biāo)不同,但是Q1和Q2橫坐標(biāo)相同,即L1平行于Y軸,則交點(diǎn)橫坐標(biāo)為Q1的橫坐標(biāo),代入到L0的直線方程中可以計(jì)算出交點(diǎn)縱坐標(biāo);

 4. 如果P1和P2縱坐標(biāo)相同,即L0平行于X軸

  a) 若L1也平行于X軸,

    i. 若P1的橫坐標(biāo)和Q1的橫坐標(biāo)相同,說明L0和L1共線,假如L1是直線的話他們有無窮的交點(diǎn),假如L1是線段的話可用"計(jì)算兩條共線線段的交點(diǎn)"的算法求他們的交點(diǎn)(該方法在前文已討論過);
    ii. 否則說明L0和L1平行,他們沒有交點(diǎn);

  b) 若L1不平行于X軸,則交點(diǎn)縱坐標(biāo)為P1的縱坐標(biāo),代入到L1的直線方程中可以計(jì)算出交點(diǎn)橫坐標(biāo);

 5. 如果P1和P2縱坐標(biāo)不同,但是Q1和Q2縱坐標(biāo)相同,即L1平行于X軸,則交點(diǎn)縱坐標(biāo)為Q1的縱坐標(biāo),代入到L0的直線方程中可以計(jì)算出交點(diǎn)橫坐標(biāo);

 6. 剩下的情況就是L1和L0的斜率均存在且不為0的情況

  a) 計(jì)算出L0的斜率K0,L1的斜率K1 ;

  b) 如果K1 = K2 

    i. 如果Q1在L0上,則說明L0和L1共線,假如L1是直線的話有無窮交點(diǎn),假如L1是線段的話可用"計(jì)算兩條共線線段的交點(diǎn)"的算法求他們的交點(diǎn)(該方法在前文已討論過);
    ii. 如果Q1不在L0上,則說明L0和L1平行,他們沒有交點(diǎn)。

  c) 聯(lián)立兩直線的方程組可以解出交點(diǎn)來

  這個(gè)算法并不復(fù)雜,但是要分情況討論清楚,尤其是當(dāng)兩條線段共線的情況需要單獨(dú)考慮,所以在前文將求兩條共線線段的算法單獨(dú)寫出來。另外,一開始就先利用矢量叉乘判斷線段與線段(或直線)是否相交,如果結(jié)果是相交,那么在后面就可以將線段全部看作直線來考慮。需要注意的是,我們可以將直線或線段方程改寫為ax+by+c=0的形式,這樣一來上述過程的部分步驟可以合并,縮短了代碼長(zhǎng)度,但是由于先要求出參數(shù),這種算法將花費(fèi)更多的時(shí)間。

  求線段或直線與折線、矩形、多邊形的交點(diǎn)

  分別求與每條邊的交點(diǎn)即可。

  求線段或直線與圓的交點(diǎn):

  設(shè)圓心為O,圓半徑為r,直線(或線段)L上的兩點(diǎn)為P1,P2。

  1. 如果L是線段且P1,P2都包含在圓O內(nèi),則沒有交點(diǎn);否則進(jìn)行下一步。

  2. 如果L平行于Y軸,

   a) 計(jì)算圓心到L的距離dis;
   b) 如果dis > r 則L和圓沒有交點(diǎn);
   c) 利用勾股定理,可以求出兩交點(diǎn)坐標(biāo),但要注意考慮L和圓的相切情況。

  3. 如果L平行于X軸,做法與L平行于Y軸的情況類似;

  4. 如果L既不平行X軸也不平行Y軸,可以求出L的斜率K,然后列出L的點(diǎn)斜式方程,和圓方程聯(lián)立即可求解出L和圓的兩個(gè)交點(diǎn);

  5. 如果L是線段,對(duì)于2,3,4中求出的交點(diǎn)還要分別判斷是否屬于該線段的范圍內(nèi)。

  凸包的概念

  點(diǎn)集Q的凸包(convex hull)是指一個(gè)最小凸多邊形,滿足Q中的點(diǎn)或者在多邊形邊上或者在其內(nèi)。下圖中由紅色線段表示的多邊形就是點(diǎn)集Q={p0,p1,...p12}的凸包。


   
 

  凸包的求法

  現(xiàn)在已經(jīng)證明了凸包算法的時(shí)間復(fù)雜度下界是O(n*logn),但是當(dāng)凸包的頂點(diǎn)數(shù)h也被考慮進(jìn)去的話,Krikpatrick和Seidel的剪枝搜索算法可以達(dá)到O(n*logh),在漸進(jìn)意義下達(dá)到最優(yōu)。最常用的凸包算法是Graham掃描法和Jarvis步進(jìn)法。本文只簡(jiǎn)單介紹一下Graham掃描法,其正確性的證明和Jarvis步進(jìn)法的過程大家可以參考《算法導(dǎo)論》。

  對(duì)于一個(gè)有三個(gè)或以上點(diǎn)的點(diǎn)集Q,Graham掃描法的過程如下:

  令p0為Q中Y-X坐標(biāo)排序下最小的點(diǎn) 
  設(shè)<p1,p2,...pm>為對(duì)其余點(diǎn)按以p0為中心的極角逆時(shí)針排序所得的點(diǎn)集(如果有多個(gè)點(diǎn)有相同的極角,除了距p0最遠(yuǎn)的點(diǎn)外全部移除
  壓p0進(jìn)棧S
  壓p1進(jìn)棧S
  壓p2進(jìn)棧S
    for i ← 3 to m
      do while 由S的棧頂元素的下一個(gè)元素、S的棧頂元素以及pi構(gòu)成的折線段不拐向左側(cè)
        對(duì)S彈棧
      壓pi進(jìn)棧S
    return S;

 

  此過程執(zhí)行后,棧S由底至頂?shù)脑鼐褪荙的凸包頂點(diǎn)按逆時(shí)針排列的點(diǎn)序列。需要注意的是,我們對(duì)點(diǎn)按極角逆時(shí)針排序時(shí),并不需要真正求出極角,只需要求出任意兩點(diǎn)的次序就可以了。而這個(gè)步驟可以用前述的矢量叉積性質(zhì)實(shí)現(xiàn)。

四、結(jié)語

  盡管人類對(duì)幾何學(xué)的研究從古代起便沒有中斷過,但是具體到借助計(jì)算機(jī)來解決幾何問題的研究,還只是停留在一個(gè)初級(jí)階段,無論從應(yīng)用領(lǐng)域還是發(fā)展前景來看,計(jì)算幾何學(xué)都值得我們認(rèn)真學(xué)習(xí)、加以運(yùn)用,希望這篇文章能帶你走進(jìn)這個(gè)豐富多彩的世界。

posted @ 2009-10-27 22:26 chaosuper 閱讀(429) | 評(píng)論 (0)編輯 收藏

當(dāng)讀者有一定c/c++基礎(chǔ)
推薦的閱讀順序:
level 1
從<<essential c++>>開始,短小精悍,可以對(duì)c++能進(jìn)一步了解其特性
以<<c++ primer>>作字典和課外讀物,因?yàn)樘癫豢赡芤豢跉饪赐?br>
level 2
然后從<<effective c++>>開始轉(zhuǎn)職,這是圣經(jīng),請(qǐng)遵守10誡,要經(jīng)常看,沒事就拿來翻翻
接著是<<exceptional c++>>,個(gè)人認(rèn)為Herb Sutter主席大人的語言表達(dá)能力不及Scott Meyers總是在教育第一線的好
順下來就是<<more effective c++>>和<<more exceptional c++>>,請(qǐng)熟讀并牢記各條款
當(dāng)你讀到這里,應(yīng)該會(huì)有一股升級(jí)的沖動(dòng)了

level 3
<<insied the c++ object model>>看過后如一縷清風(fēng)掃去一直以來你對(duì)語言的疑惑,你終于能明白compiler到底都背著你做了些什么了,這本書要細(xì)細(xì)回味,比較難啃,最好反復(fù)看幾遍,加深印象
看完上一本之后,這本<<The design and evolution of c++>>會(huì)重演一次當(dāng)年C++他爹在設(shè)計(jì)整個(gè)語言過程中的歷程

level 4
<<the c++ standard library>>是stl的字典,要什么都可以查得到
學(xué)c++不能不學(xué)stl,那么首先是<<effective stl>>,它和圣經(jīng)一樣是你日常行為的規(guī)范
<<generic programming and the stl>>讓你從oo向gp轉(zhuǎn)變
光用不行,我們還有必要了解stl的工作原理,那么<<stl源碼剖析>>會(huì)解決你所有的困惑

level 5
對(duì)于c++無非是oo和gp,想進(jìn)一步提升oo,<<exeptional c++ style>>是一本主席這么多年的經(jīng)驗(yàn)之談,是很長(zhǎng)esp的
一位stl高手是不能不去了解template的,<<c++ template>>是一本百科全書,足夠你看完后對(duì)于gp游刃有余
<<modern c++ design>>是太過聰明的人寫給明眼人看的

好書有很多,不能一一列舉
以上我的讀書經(jīng)歷,供各位參考。接下來的無非就是打怪練級(jí),多聽多寫多看;boost、stl、loki這些都是利器,斬妖除魔,奉勸各位別再土法練鋼了。

at last,無他,唯手熟爾。

忘了一本《thinking in C++》
也是經(jīng)典系列之一



<<effective c++>>這本圣經(jīng)的作者Scott Meyesr在給<<modern c++ design>>序言的時(shí)候高度的贊賞了Andrei同志的工作:C++社群對(duì)template的理解即將經(jīng)歷一次巨大的變化,我對(duì)它所說的任何事情,也許很快就會(huì)被認(rèn)為是陳舊的、膚淺的、甚至是完全錯(cuò)的。
就我所知,template的世界還在變化,速度之快就像我1995年回避寫它的時(shí)候一樣。從發(fā)展的速度來看,我可能永遠(yuǎn)不會(huì)寫有關(guān)template的技術(shù)書籍。幸運(yùn)的是一些人比我勇敢,Andrei就是這樣一位先鋒。我想你會(huì)從此書得到很多收獲。我自己就得到了很多——Scott Meyers September2000。

并且,Scott Meyers 在最近的Top5系列文章中,評(píng)價(jià)C++歷史里面最重要5本書中、把Modern C++ Design列入其中,另外四本是它自己的effective c++、以及C++ Programming Language、甚至包括《設(shè)計(jì)模式》和《C++標(biāo)準(zhǔn)文檔》。 
顯然,Scott Meyers已經(jīng)作為一個(gè)頂尖大師的角度承認(rèn)了<<modern c++ design>>的價(jià)值。

并且調(diào)侃地說,可以把是否使用其中模板方法定義為,現(xiàn)代C++使用者和非現(xiàn)代C++使用者,并且檢討了自己在早期版本Effective對(duì)模板的忽視,最后重申在新版本Effective第七章節(jié)加入大量對(duì)模板程序設(shè)計(jì)的段落,作為對(duì)這次失誤的補(bǔ)償。

并且,在這里要明確的是<<modern c++ design>>并不是一本泛型編成的書,也不是一本模板手冊(cè)。其中提出了基于策略的設(shè)計(jì)方法,有計(jì)劃和目的的使用了模板、面向?qū)ο蠛驮O(shè)計(jì)模式。雖然Andrei本人對(duì)模板的研究世界無人能敵,但對(duì)其他領(lǐng)域的作為也令人贊嘆。

任何做游戲的人都不能忽視OpenAL把,你在開發(fā)者的名單里能看到Loki的名字:)

最近很忙,無時(shí)間寫文章,小奉獻(xiàn)一下書籍下載地址。雖然經(jīng)過驗(yàn)證,但是不感肯定各位一定能下:

<effective C++> 中文
http://www.itepub.net/html/ebookcn/2006/0523/40146.html
英文
http://dl.njfiw.gov.cn/books/C/Essential%20C++.chm
<c++ primer> 英文
http://www.vipbook.net/soft/2114.htm

<<effective c++>>英文
http://soft.studa.com/downinfo/19350.html

<exceptional c++> 英文
http://soft.studa.com/downinfo/19380.html

<more exceptional c++> 英文
http://soft.studa.com/downinfo/19377.html

<inside the C++ object Model>
http://dl.njfiw.gov.cn/books/C/Inside%20the%20C++%20Object%20Model.chm

< the design and evolution of c++ >
http://ebook.manboo.info/2006/11/19/the-design-and-evolution-of-c.html

< effective STL>
http://dl.njfiw.gov.cn/books/C/Effective%20STL.pdf

< the standard STL>
http://dl.njfiw.gov.cn/books/C/The%20C++%20Standard%20Library.chm

< moden C++ design>
http://dl.njfiw.gov.cn/books/C/Modern%20C++%20Design.chm

<exceptional c++ style>
http://cpp.ga-la.com/html/8/10/0510/71.htm

< c++ template >
http://www.itepub.net/html/ebookcn/2006/0429/7320.html

< generic programming and the STL >
http://www.jjhou.com/jjtbooks-generic-programming-and-the-stl.htm

posted @ 2009-10-22 09:04 chaosuper 閱讀(200) | 評(píng)論 (0)編輯 收藏

真正的愛情,只有在平等的條件下產(chǎn)生。   
去追一個(gè)對(duì)你沒感覺的女人,只會(huì)讓她很煩,如果她碰巧很漂亮,有很多像你一樣或者比你優(yōu)秀的男人去追,那你一定不會(huì)有機(jī)會(huì);即便上天給你了一個(gè)千載難逢的機(jī)會(huì),并且還讓你抓住了,那么最終,你還是會(huì)失去的。因?yàn)槟愕膼郏?dāng)她不再需要的時(shí)候,或者遇到更好的男人的時(shí)候,就是負(fù)擔(dān)。   
最慘的是碰到玩弄感情的女人,你一定死得很慘。   
女人拒絕男人,或者拋棄男人,根本理由只有一個(gè),就是你達(dá)不到她的水平。   
在感情上,男人要主動(dòng),但是,主動(dòng)之前先看看你自己夠不夠斤兩,如果你不夠她的水平,那就放棄吧!   
如果你觀察過一個(gè)有一個(gè)以上男朋友的女人,你一定會(huì)發(fā)現(xiàn),她最喜歡的一定是那個(gè)對(duì)她最冷淡的男人。   
所以說,愛人不如愛自己!   
你要是愛自己勝過別的任何人,你會(huì)專注于自己的事業(yè),你就會(huì)開始有錢;你會(huì)注意自己的外表,你就會(huì)變的帥氣;你會(huì)對(duì)自己充滿信心,你會(huì)充滿魅力。只要你懂得欣賞女人的心理,就會(huì)有很多的女人都來愛你。   
她們并不是愛你的錢,相信我。除非你是那種除了錢什么都沒有的人,她們愛的確實(shí)是你這個(gè)人。你因此而取得了愛情中的優(yōu)勢(shì)。   
如果你取得了優(yōu)勢(shì),你就有了選擇的權(quán)力;你可以選擇一個(gè)和你一樣優(yōu)秀的女人,自己做一個(gè)忠實(shí)的丈夫,所有人都會(huì)羨慕你們這對(duì)神仙眷屬;你也可以選擇一個(gè)自己心愛的但是并不如你的女人,這時(shí)你就不用那么辛苦地去追求她;你甚至可以去選擇擁有無數(shù)的女人,社會(huì)不會(huì)譴責(zé)你,因?yàn)樗齻兪切母是樵傅摹?/span>   
知道為什么男人在二十歲的時(shí)候相信愛情,在三十歲的時(shí)候相信事業(yè)了吧。   
愛情是脆弱的,在現(xiàn)實(shí)面前根本不堪一擊。世界上的確有很多的天荒地老,絕大多數(shù)是因?yàn)橹魅斯计椒驳酶静粫?huì)遭遇任何誘惑,幸運(yùn)到能始終在一起。   
虛榮是愛情最大的敵人,第二就是長(zhǎng)久的分離。小別勝新婚,長(zhǎng)久的別離則是愛情的毒藥。   
沉迷在愛情中的戀人指著月亮發(fā)誓天長(zhǎng)地久,難道他們不知道,月亮本身都是會(huì)不斷的在變么?月有陰晴圓缺,人有悲歡離合!   
想一想,十年之前,我們?cè)谀睦镒鍪裁矗课覀兘裉煸谧鍪裁矗渴曛埃覀兡芟胂蟮浇裉烀矗坎荒埽晕覀円矡o法預(yù)料到十年以后。人,只有中年之后才能穩(wěn)定下來,所以想承諾的話,到那時(shí)侯再承諾吧!

 

posted @ 2009-09-17 23:47 chaosuper 閱讀(128) | 評(píng)論 (0)編輯 收藏

僅列出標(biāo)題
共12頁: First 2 3 4 5 6 7 8 9 10 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区在线观看视频| 国产精品99久久久久久人| 99视频有精品| 欧美影院一区| 亚洲第一精品福利| 亚洲性感激情| 麻豆精品精品国产自在97香蕉| 欧美日韩在线三级| 红杏aⅴ成人免费视频| 一区二区三区精品在线| 久久久综合视频| 一本色道久久| 老**午夜毛片一区二区三区| 欧美视频二区| 91久久精品一区| 久久国产66| 亚洲免费精品| 久色婷婷小香蕉久久| 国产精品亚洲综合色区韩国| 亚洲精品免费网站| 久久精彩免费视频| av成人手机在线| 老牛嫩草一区二区三区日本| 国产精品入口日韩视频大尺度| 亚洲韩国日本中文字幕| 欧美在线一区二区| 亚洲精选视频在线| 久久综合给合久久狠狠狠97色69| 国产精品久久久久久五月尺| 亚洲人成网站色ww在线| 久久久久久穴| 亚洲免费在线观看视频| 欧美精品v日韩精品v国产精品| 尤物在线精品| 久久av免费一区| 在线亚洲成人| 欧美日韩精品久久| 亚洲精品久久在线| 欧美肥婆在线| 久久久91精品国产一区二区三区| 国产精品亚发布| 亚洲自拍16p| 99国产精品视频免费观看一公开| 欧美高清视频在线| 亚洲国产aⅴ天堂久久| 久久青青草原一区二区| 午夜视频一区| 国产人成精品一区二区三| 亚洲午夜影视影院在线观看| 亚洲激情在线观看| 欧美韩日精品| 亚洲精品影院在线观看| 欧美激情乱人伦| 蜜桃av一区| 亚洲国产精品成人久久综合一区| 麻豆久久精品| 久久精品女人的天堂av| 好吊日精品视频| 久久久久久久欧美精品| 欧美一区日韩一区| 国产伊人精品| 久久亚洲风情| 久久久久在线观看| 亚洲国产cao| 亚洲高清视频在线| 欧美激情综合亚洲一二区| 亚洲乱码一区二区| 日韩视频在线一区二区三区| 欧美日韩在线观看一区二区| 亚洲校园激情| 亚洲小视频在线观看| 国产精品欧美一区喷水| 欧美在线国产| 欧美一区午夜视频在线观看| 国内精品写真在线观看| 久久人人爽人人爽爽久久| 久久国产精品一区二区三区四区 | 亚洲三级电影全部在线观看高清 | 亚洲综合欧美日韩| 亚洲免费在线电影| 国模 一区 二区 三区| 久热精品视频在线观看一区| 久久综合给合久久狠狠色| 亚洲精选在线观看| 日韩亚洲在线观看| 国产免费观看久久黄| 久久婷婷国产麻豆91天堂| 噜噜噜噜噜久久久久久91| 亚洲精品日韩在线| 99视频国产精品免费观看| 国产精品综合网站| 欧美成人免费小视频| 欧美激情精品久久久| 亚洲一级免费视频| 欧美一区在线视频| 亚洲欧洲在线一区| 国产精品99久久久久久久vr| 国产一区二区精品丝袜| 亚洲大胆人体视频| 国产精品啊啊啊| 久久婷婷国产综合精品青草| 欧美国产综合视频| 校园春色国产精品| 美国成人直播| 亚洲一区二区三区影院| 欧美在线观看一区二区| 亚洲精品字幕| 亚洲欧美乱综合| 亚洲欧洲日产国产综合网| aa级大片欧美| 韩国av一区| 夜夜嗨一区二区三区| 在线观看91精品国产麻豆| aⅴ色国产欧美| 亚洲福利国产| 亚洲欧美在线观看| 亚洲乱码久久| 欧美在线精品免播放器视频| 日韩小视频在线观看| 欧美一区二区视频免费观看| 日韩小视频在线观看| 久久国产精彩视频| 中日韩美女免费视频网站在线观看 | 亚洲激情图片小说视频| 亚洲午夜伦理| 亚洲精品国产系列| 欧美一区二区三区在线播放| 亚洲美女中文字幕| 久久精品免费电影| 午夜精品久久久久影视| 欧美精品日韩www.p站| 久久久欧美精品| 国产精品国产馆在线真实露脸| 欧美大色视频| 国模私拍一区二区三区| 一区二区三区视频观看| 亚洲精品视频在线看| 欧美有码在线视频| 午夜激情综合网| 欧美日韩午夜激情| 亚洲第一在线综合在线| 精品电影在线观看| 亚洲欧美日韩精品在线| 亚洲一区二区黄色| 欧美国产在线视频| 欧美电影免费观看高清| 国内精品一区二区三区| 亚洲一二三级电影| 亚洲一区二区三区777| 欧美极品一区| 亚洲高清三级视频| 亚洲夫妻自拍| 久久久国产精品一区二区中文| 午夜精品久久久久久久久| 欧美日韩一区二区三| 亚洲人成人99网站| 亚洲精选91| 免费成人黄色片| 欧美va亚洲va国产综合| 黄色成人在线| 久久久99国产精品免费| 久久久久久999| 国产日韩一区二区| 亚洲在线观看免费| 性久久久久久久久| 国产精品欧美激情| 亚洲图片欧美日产| 亚洲一二三级电影| 欧美系列精品| 在线亚洲激情| 亚洲影院色在线观看免费| 欧美视频一区二区三区…| 99国产精品99久久久久久粉嫩| 在线亚洲欧美视频| 欧美日韩国产精品自在自线| 日韩午夜在线播放| 亚洲私人影院| 国产精品一区二区久久久| 亚洲男女自偷自拍| 久久成人综合视频| 国产亚洲一区二区三区在线观看 | **性色生活片久久毛片| 久久久久在线观看| 欧美激情国产高清| av成人毛片| 国产精品美女诱惑| 亚洲欧美在线一区二区| 久久精品日韩欧美| 在线成人av.com| 欧美韩日视频| 一区二区久久| 久久精品视频在线看| 极品少妇一区二区三区精品视频| 久久久久久久999精品视频| 欧美韩日一区二区| 中文国产亚洲喷潮| 国产欧美日韩高清| 久久人人爽人人爽| 亚洲日本激情| 亚洲欧美激情诱惑|