无法理解HDU 2823的解决方案(Can't understand the solution of HDU 2823)
以下代码片段取自此处 。 这是HDU 2823这个问题的解决方案。
#define eps 1e-9 double rc(point pp[],point qq[],int n,int m) { int q=0; int p=0; for(int i=0;i<n;i++) if(pp[i].y-pp[p].y<-eps) p=i; for(int i=0;i<m;i++) if(qq[i].y-qq[q].y>eps) q=i; pp[n]=pp[0]; qq[m]=qq[0]; double tmp,ans=1e99; for(int i=0;i<n;i++) { while((tmp=cross(pp[p+1],qq[q+1],pp[p])-cross(pp[p+1],qq[q],pp[p]))>eps) q=(q+1)%m; if(tmp<-eps) ans=min(ans,dist_p_to_seg(qq[q],pp[p],pp[p+1])); else ans=min(ans,dist_seg_to_seg(pp[p],pp[p+1],qq[q],qq[q+1])); p=(p+1)%n; } return ans; }
pp[]
和qq[]
是两个不同的凸包。p
是pp
凸包的最高点,q
是我似乎无法理解这一行:
while((tmp=cross(pp[p+1],qq[q+1],pp[p])-cross(pp[p+1],qq[q],pp[p]))>eps) q=(q+1)%m;
他想要实现什么目标?
The following code snippet was taken from here. It is the solution of this problem HDU 2823.
#define eps 1e-9 double rc(point pp[],point qq[],int n,int m) { int q=0; int p=0; for(int i=0;i<n;i++) if(pp[i].y-pp[p].y<-eps) p=i; for(int i=0;i<m;i++) if(qq[i].y-qq[q].y>eps) q=i; pp[n]=pp[0]; qq[m]=qq[0]; double tmp,ans=1e99; for(int i=0;i<n;i++) { while((tmp=cross(pp[p+1],qq[q+1],pp[p])-cross(pp[p+1],qq[q],pp[p]))>eps) q=(q+1)%m; if(tmp<-eps) ans=min(ans,dist_p_to_seg(qq[q],pp[p],pp[p+1])); else ans=min(ans,dist_seg_to_seg(pp[p],pp[p+1],qq[q],qq[q+1])); p=(p+1)%n; } return ans; }
pp[]
andqq[]
are two different convex hull.p
is the highest point ofpp
convex hull andq
is the lowest point ofI can't seem to understand this line:
while((tmp=cross(pp[p+1],qq[q+1],pp[p])-cross(pp[p+1],qq[q],pp[p]))>eps) q=(q+1)%m;
What is he trying to achieve?
原文:https://stackoverflow.com/questions/38676898
最满意答案
是的,你可以在同一个按钮上使用onClick和onTouch,但是OnTouch回调会得到像ACTION_MOVE,ACTION_UP,ACTION_DOWN等的motionEvent,不要忘记在onTouch回调中返回false( Details )。 请参考下面的代码
Button button = (Button) findViewById(R.id.button); button.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { Log.d("test", "ontouch"); return false; } }); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { Log.d("test", "onclick"); } });
只需分别在TouchTouch和OnClick上执行您想要执行的操作即可。 请注意点击是用户按下按钮并释放时执行的操作,但用户按下时将触摸。
所以只需点击一下,日志就会像这样。 1.ACTION_DOWN,2.ACTION_UP 3. onClick
03-22 16:19:39.735: D/test(682): ontouch 03-22 16:19:39.735: D/test(682): ontouch 03-22 16:19:39.735: D/test(682): onclick
Yes you can use both onClick and onTouch on a same button, but OnTouch callback you'll get motionEvent like ACTION_MOVE, ACTION_UP , ACTION_DOWN etc, Don't forget to return false (Details)in onTouch callback. Please refer the below code
Button button = (Button) findViewById(R.id.button); button.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { Log.d("test", "ontouch"); return false; } }); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { Log.d("test", "onclick"); } });
Just do the operations you want to do in the call backs onTouch and onClick respectively. Please NOte click is a action performed when user press the button and release but Touch will be taken when user presses it.
So on a single click the log will be like this. 1.ACTION_DOWN, 2.ACTION_UP 3. onClick
03-22 16:19:39.735: D/test(682): ontouch 03-22 16:19:39.735: D/test(682): ontouch 03-22 16:19:39.735: D/test(682): onclick
相关问答
更多-
用户释放手指时的事件是MotionEvent.ACTION_UP 。 我不知道是否有任何禁止使用View.OnTouchListener而不是onClick()的指导原则,很可能取决于情况。 以下是一个示例代码: imageButton.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(event.getActi ...
-
你这里有一个严重的设计问题。 您不需要通过XyloTouch类扩展Main Class。 您可以简单地使用Main类并使其实现OnTouchListener。 这里的问题是你的XyloTouch类没有像c_lL这样的实例变量的有效引用,因为它们不是由类本身设置的 XyloTouch xyloTouch = new XyloTouch(); main_lL.setOnTouchListener(xyloTouch); 最简单的解决方案是让您的Main类实现OnTouchListener并将其用作侦听 ...
-
你应该在surfaceview中使用onTouchEvent you should use onTouchEvent within surfaceview
-
在这种情况下,请勿使用setOnTouchListener 。 创建一个选择器: 绘制/ selector_btn_default.xml是的,你可以在同一个按钮上使用onClick和onTouch,但是OnTouch回调会得到像ACTION_MOVE,ACTION_UP,ACTION_DOWN等的motionEvent,不要忘记在onTouch回调中返回false( Details )。 请参考下面的代码 Button button = (Button) findViewById(R.id.button); button.setOnTouchListener(new OnTouchListener() { ...使用一些额外的计数器 int additionalCounter = 0; ButtonPlus.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { ++additionalCounter; if (additionalCounter % X == 0) { ponts = ponts + 1; ...您总是从onTouch()方法返回true 。 这表示您的处理程序已使用触摸事件,因此不会进一步处理该事件。 这导致滑动永不工作。 返回false而不是。 You always return true from the onTouch() method. This signifies that your handler has consumed the touch event and so the event is not further processed. This results in the swi ...尝试返回super.onTouchListener ,或者当您不想使用该事件时返回true (我认为您实现了手势)。 返回false表示您正在丢弃TouchEvent,如果要停止滚动,则不希望这样做。 try returning super.onTouchListener, or true, when you don't want to consume the event (i'm thinking you implemented gestures). returning false means you'r ...为什么你的D&D不工作: D&D无法正常工作,因为您的卡(使用内部FrameLayout)正在实施“吃掉”d&d事件的onClick事件。 解决方案有两个: 你可以有2个不同的区域,一个用于点击事件(卡的最大部分),一个用于d&d事件(卡的左下边缘)。 您可以在Android音乐播放器中看到实现此解决方案的实例。 否则,您可以同时处理这两个事件: 在相同的x / y位置同时单击==向下+向上(低于100毫秒) dd ==在不同时间下降+上升(> 50 / 100ms) Why your D&D is not ...
为什么我不能为RelativeLayout设置onTouchListener?(Why cant i set the onTouchListener for my RelativeLayout?)[2022-02-24]
首先设置setContentView,然后再对其执行操作: 例如: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.id.myLayout); //name of the layout file } 您的活动现在看起来像这样: public class ColorCrazeActivity extends A ...相关文章
更多- Five More Hacker Tools Every CISO Should Understand
- hdu 4305 生成树奇数问题
- 每日英语:When Simplicity Is The Solution
- hdu---1591Encoded Love-letter
- HDFS小文件处理解决方案总结+FaceBook(HayStack) + 淘宝(TFS)
- javax.imageio.IIOException: Can't create output stream!的解决方案
- Hadoop专业解决方案-第13章 Hadoop的发展趋势
- 一个较完整的关键字过滤解决方案(中)
- Vivek's blog - Roll your own autocomplete solution using Tries.
- 企业级内部信息统一搜索解决方案
最新问答
更多- 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
- 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
- OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
- 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
- codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
- 在计算机拍照在哪里进入
- 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
- No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
- 单页应用程序:页面重新加载(Single Page Application: page reload)
- 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
- System.StackOverflow错误(System.StackOverflow error)
- KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
- 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
- android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
- TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
- 企业安全培训的各项内容
- 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
- C#类名中允许哪些字符?(What characters are allowed in C# class name?)
- NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
- 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
- 将多个行和可变行移动到列(moving multiple and variable rows to columns)
- 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
- 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
- Angular $资源不会改变方法(Angular $resource doesn't change method)
- 在Angular 5中不是一个函数(is not a function in Angular 5)
- 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
- 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
- 常见的python rpc和cli接口(Common python rpc and cli interface)
- Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
- 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)