﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-老斋-随笔分类-OGRE相关</title><link>http://www.cppblog.com/yttria/category/10124.html</link><description>不尽人事，焉知天命。---- 榊眞喜男</description><language>zh-cn</language><lastBuildDate>Fri, 10 Apr 2009 08:30:04 GMT</lastBuildDate><pubDate>Fri, 10 Apr 2009 08:30:04 GMT</pubDate><ttl>60</ttl><item><title>OGRE---OVERVIEW</title><link>http://www.cppblog.com/yttria/archive/2009/04/10/79459.html</link><dc:creator>老斋</dc:creator><author>老斋</author><pubDate>Fri, 10 Apr 2009 03:08:00 GMT</pubDate><guid>http://www.cppblog.com/yttria/archive/2009/04/10/79459.html</guid><wfw:comment>http://www.cppblog.com/yttria/comments/79459.html</wfw:comment><comments>http://www.cppblog.com/yttria/archive/2009/04/10/79459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yttria/comments/commentRss/79459.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yttria/services/trackbacks/79459.html</trackback:ping><description><![CDATA[<img alt="" src="http://www.cppblog.com/images/cppblog_com/yttria/uml-overview.png" border=0>
<img src ="http://www.cppblog.com/yttria/aggbug/79459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yttria/" target="_blank">老斋</a> 2009-04-10 11:08 <a href="http://www.cppblog.com/yttria/archive/2009/04/10/79459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>需要了解的一些几何基础知识</title><link>http://www.cppblog.com/yttria/archive/2009/04/06/79099.html</link><dc:creator>老斋</dc:creator><author>老斋</author><pubDate>Mon, 06 Apr 2009 07:35:00 GMT</pubDate><guid>http://www.cppblog.com/yttria/archive/2009/04/06/79099.html</guid><wfw:comment>http://www.cppblog.com/yttria/comments/79099.html</wfw:comment><comments>http://www.cppblog.com/yttria/archive/2009/04/06/79099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yttria/comments/commentRss/79099.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yttria/services/trackbacks/79099.html</trackback:ping><description><![CDATA[1.两点间的距离公式：<br><br>已知：平面上的两点的直角坐标分别为P1(x1,y1)，P2(x2,y2)，则P1和P2两点间的距离为<br><br>d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))<br><br>2.线段的中点坐标公式：<br><br>已知：平面上的两点的直角坐标分别为P1(x1,y1)，P2(x2,y2)，则线段P1P2的中点坐标为<br><br>x=(x1+x2)/2 y=(y1+y2)/2 <br><br>3.直线的斜率公式：<br><br>已知：平面上的两点的直角坐标分别为P1(x1,y1)，P2(x2,y2),则线段P1P2所在的直线的斜率为<br><br>k=（y2-y1)/(x2-x1)<br><br>4.直线的点斜式方程:<br><br>已知：直线过点P0(x0,y0)，斜率为k,则该直线所在的方程为<br><br>y=k(x-x0)+y0=kx+y0-kx0=kx+b(与y轴交点的纵坐标:纵截距)<br><br>练习<br><br>1.已知:矩形上三点的坐标p1(x1,y1),p2(x2,y2),p3(x3,y3)<br><br>(1)求矩形另外一点的坐标p4(x4,y4)。<br><br>(2)判断点p(x,y)是在矩形内、矩形外还是在矩形的边上。 <br><br><br><br>4. 2 线段的相交判断<br>1.叉积<br><br>已知：平面上的两点的直角坐标分别为p1(x1,y1)，p2(x2,y2)则<br><br>（1）该两点相对坐标原点(0,0)的叉积为m=x1*y2-x2*y1<br><br>若m&gt;0 则相对坐标原点,点p1在点p2的顺时针方向<br><br>若m&lt;0 则相对坐标原点,点p1在点p2的逆时针方向<br><br>若m=0 则原点和p1、p2在一条直线上<br><br>（2）该两点相对点p0(x0,y0)的叉积为m=(x1-x0)*(y2-y0)-(x2-x0)*(y1-y0)<br><br>若m&gt;0 则相对p0点,点p1在点p2的顺时针方向<br><br>若m&lt;0 则相对p0点,点p1在点p2的逆时针方向<br><br>若m=0 则p0和p1、p2在一条直线上<br><br>2.确定两条连续的有向线段p0p1和p1p2在pl点是向左转还是向右转<br><br><br><br>(1)计算叉积m=(x1-x0)*(y2-y0)-(x2-x0)*(y1-y0)<br><br>（2）判断m<br><br>若m&gt;0 则p1点向左拐<br><br>若m&lt;0 则p1点向右拐<br><br>若m=0 则点p0、p1、p2在一条直线上<br><br>3.确定两条线段p1p2、p3p4是否相交 <br><br>程序如下：<br><br>program xdxj;<br>type p=record<br>x, y:real<br>end;<br>var p1,p2,p3,p4:p;<br>function m(p1,p2,p0:p):real;<br>begin<br>m:=(p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);<br>end;<br>function max(a,b:real):real;<br>begin<br>if a&gt;b then max:=a else max:=b;<br>end;<br>function min(a,b:real):real;<br>begin<br>if a&lt;b then min:=a else min:=b;<br>end;<br>function across(p1,p2,p3,p4:p):boolean;<br>begin<br>if (max(p1.x,p2.x)&gt;=min(p3.x,p4.x)) and<br>(max(p3.x,p4.x)&gt;=min(p1.x,p2.x)) and<br>(max(p1.y,p2.y)&gt;=min(p3.y,p4.y)) and<br>(max(p3.y, p4.y)&gt;=min(p1.y,p2.y)) and<br>(m(p2,p3,p1)*m(p2,p4,p1)&lt;0) and (m(p4,p1,p3)*m(p4,p2,p3)&lt;0)<br>then across:=true else across:=false;<br>end;<br>begin<br>readln(p1.x,p1.y,p2.x,p2.y);<br>readln(p3.x,p3.y,p4.x,p4.y);<br>if across(p1,p2,p3,p4) then writeln('yes') else writeln('no');<br>end.<br><br><br><br>4.３寻找凸包算法<br>1.凸包的概念<br><br>一个点集Q＝（p0,p1,p2...pn-1)，它的凸包是一个最小的凸多边形P，且满足Q中的每个点或者在P的边界上，或者在P的内部。在直观上，我们可以把Q中的每个点看作露在板外的铁钉．那么凸包就是包含所有铁钉的一个拉紧的橡皮绳所构成的形状．<br>如图：<br><br><br><br>2.寻找凸包算法<br><br>算法如下(Graham算法):<br><br>1)求q中y坐标最小的点p0,若具有最小坐标的点有多个,则取最左边的点作为po.<br><br>2)对q中剩余的点按逆时针相对p0的极角排序,若有数个保留其中距p0最远的点<br><br>得到序列(p1,p2,...pn-1);<br><br>3)p0,p1,p2相继入栈<br><br>4)for i=3 to n-1 do<br><br>1) while 由次栈顶元素、栈顶元素和Pi所形成角不是向左转do栈顶元素出栈s；<br>2)pi入栈<br><br>5)打印按逆时针排列的栈中的各顶点<br><br>程序如下:<br><br>program tubao;<br>const maxn=500;<br>type p=record<br>x,y:real;<br>end;<br>var n,top:integer;<br>list:array[0..maxn]of p;<br>s:array[1..maxn] of integer;<br>f:text;<br>procedure swap(var a,b:p);<br>var t:p;<br>begin t:=a;a:=b;b:=t end;<br>function m(p1,p2,p0:p):real;<br>begin<br>m:=(p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);<br>end;<br>function comp(p1,p2:p):boolean;<br>var t:real;<br>begin<br>t:=m(p1,p2,list[0]);<br>if (t&gt;0) or (t=0) and (sqr(p1.x-list[0].x)+sqr(p1.y-list[0].y)&lt;<br>sqr(p2.x-list[0].x)+sqr(p2.y-list[0].y))<br>then comp:=true else comp:=false;<br>end;<br>procedure sort(l,r:integer);<br>var i,j:integer;<br>x:p;<br>begin<br>if r-l+1&lt;=5 then begin<br>for j:=l+1 to r do<br>begin<br>i:=j;<br>while (i&gt;1) and comp(list[i],list[i-1]) do<br>begin swap(list[i],list[i-1]); dec(i) end<br>end;<br>end else<br>begin<br>x:=list[l+random(r-l+1)];<br>i:=l;j:=r;<br>repeat<br>while comp(list[i],x) do inc(j);<br>while comp(x,list[j]) do dec(j);<br>if i&lt;j then swap(list[i],list[j])<br>until i&gt;=j;<br>sort(l,j);<br>sort(j+1,r);<br>end<br>end;<br>procedure init;<br>var i:integer;<br>begin<br>assign(f,'input.txt');<br>reset(f);<br>readln(f,n);<br>for i:=0 to n-1 do<br>begin<br>readln(f,list[i].x,list[i].y);<br>if (list[i].y&lt;list[0].y) or<br>(list[i].y=list[0].y) and (list[i].x&lt;list[0].x)<br>then swap(list[0],list[i]);<br>end ;<br>sort(1,n-1)<br>end;<br>procedure graham;<br>var i:integer;<br>begin<br>for i:=1 to 3 do s[i]:=i-1;<br>top:=3;<br>for i:=3 to n-1 do<br>begin<br>while m(list[i],list[s[top]],list[s[top-1]])&gt;=0 do dec(top);<br>inc(top);<br>s[top]:=i;<br>end;<br>for i:=1 to top do<br>write('(',list[s[i]].x:7:2,',',list[s[i]].y:7:2,')');<br>writeln<br>end;<br>begin<br>init;<br>graham;<br>readln<br>end.<br>
<img src ="http://www.cppblog.com/yttria/aggbug/79099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yttria/" target="_blank">老斋</a> 2009-04-06 15:35 <a href="http://www.cppblog.com/yttria/archive/2009/04/06/79099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>