免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Susake_
打印 上一主题 下一主题

[算法] 来个看似简单的数学问题,闲的来试试 [复制链接]

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
11 [报告]
发表于 2014-07-23 12:54 |只看该作者
回复 10# Susake_

你猜错了。。。
   

论坛徽章:
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
12 [报告]
发表于 2014-07-23 12:57 |只看该作者
少年,不要犯懒,拿出纸和笔,用高中学的东西计算个公式出来。然后再编写程序。
没难度的事儿,只是比较烦。

论坛徽章:
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
13 [报告]
发表于 2014-07-23 12:59 |只看该作者
两圆求交点,再代入另外一个式子里验证哪组xy是正解或者没有解。

论坛徽章:
11
巨蟹座
日期:2013-12-23 11:12:14双子座
日期:2014-08-28 09:14:55子鼠
日期:2014-07-25 16:21:22摩羯座
日期:2014-07-23 15:17:47摩羯座
日期:2014-05-30 13:09:05午马
日期:2014-04-30 18:10:00天秤座
日期:2014-04-25 12:12:00申猴
日期:2014-04-22 11:30:15午马
日期:2014-03-07 16:06:40辰龙
日期:2013-12-25 18:36:00摩羯座
日期:2014-09-02 17:00:55
14 [报告]
发表于 2014-07-23 13:24 |只看该作者
本帖最后由 Susake_ 于 2014-07-23 21:46 编辑

不是的,不是求交点再代入,原型是这样的rt
假设有3个圆型区域,我想找出某点的到这3区域的视角相等,分析后即只需要r1/d1 = r2/d2 = r3/d3
呃....

QQ图片20140723131526.jpg (29.05 KB, 下载次数: 18)

QQ图片20140723131526.jpg

评分

参与人数 1可用积分 +4 收起 理由
amarant + 4 赞一个!

查看全部评分

论坛徽章:
11
巨蟹座
日期:2013-12-23 11:12:14双子座
日期:2014-08-28 09:14:55子鼠
日期:2014-07-25 16:21:22摩羯座
日期:2014-07-23 15:17:47摩羯座
日期:2014-05-30 13:09:05午马
日期:2014-04-30 18:10:00天秤座
日期:2014-04-25 12:12:00申猴
日期:2014-04-22 11:30:15午马
日期:2014-03-07 16:06:40辰龙
日期:2013-12-25 18:36:00摩羯座
日期:2014-09-02 17:00:55
15 [报告]
发表于 2014-07-23 13:33 |只看该作者
算了,是这样的,取重心然后逐渐逼近最优解~
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <cstring>
  6. #include <stack>
  7. #include <map>
  8. #include <string>
  9. using namespace std;

  10. struct pt {
  11.     double x;
  12.     double y;
  13.     double r;
  14. };

  15. pt mkp(double x, double y) {
  16.     pt ret;
  17.     ret.x = x;
  18.     ret.y = y;
  19.     return ret;
  20. }

  21. double dis(pt a, pt b) {
  22.     return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
  23. }

  24. double cost(pt *p, double x, double y) {
  25.     double ang[3];
  26.     for (int i = 0; i < 3; i++) ang[i] = dis(p[i], mkp(x, y)) / p[i].r;

  27.     double diff[3];
  28.     for (int i = 0; i < 3; i++) diff[i] = ang[i] - ang[(i+1)%3];

  29.     double ret = 0;
  30.     for (int i = 0; i < 3; i++) ret += diff[i] * diff[i];

  31.     return ret;
  32. }

  33. const int dx[] = {0, 1, -1, 0};
  34. const int dy[] = {1, 0, 0, -1};
  35. const double err = 1e-6;

  36. int main(int argc, char *argv[]) {
  37.     pt p[3];
  38.     for (int i = 0; i < 3; i++) scanf("%lf %lf %lf", &(p[i].x), &(p[i].y), &(p[i].r));

  39.     pt ans;
  40.     ans.x = (p[0].x + p[1].x + p[2].x) / 3.0;
  41.     ans.y = (p[0].y + p[1].y + p[2].y) / 3.0;
  42.     double ncost = cost(p, ans.x, ans.y);

  43.     pt tmp;
  44.     double step = 1.0;
  45.     bool flag = false;
  46.     for (int i = 0; i < 300000 && ncost > err; i++) {
  47.         flag = false;
  48.         for (int k = 0; k < 4; k++) {
  49.             tmp.x = ans.x + step * ((double)dx[k]);
  50.             tmp.y = ans.y + step * ((double)dy[k]);

  51.             if (ncost > cost(p, tmp.x, tmp.y)) {
  52.                 ncost = cost(p, tmp.x, tmp.y);
  53.                 ans = tmp;
  54.                 flag = true;
  55.             }
  56.         }
  57.         if (!flag) step *= 0.5;
  58.     }

  59.     if (cost(p, ans.x, ans.y) <= err)
  60.         printf("%.5lf %.5lf\n", ans.x, ans.y);
  61.     return 0;
  62. }
复制代码

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
16 [报告]
发表于 2014-07-23 13:36 |只看该作者
少年,貌似从头到尾都只有你一个人在说“化简”什么的。。。

论坛徽章:
11
巨蟹座
日期:2013-12-23 11:12:14双子座
日期:2014-08-28 09:14:55子鼠
日期:2014-07-25 16:21:22摩羯座
日期:2014-07-23 15:17:47摩羯座
日期:2014-05-30 13:09:05午马
日期:2014-04-30 18:10:00天秤座
日期:2014-04-25 12:12:00申猴
日期:2014-04-22 11:30:15午马
日期:2014-03-07 16:06:40辰龙
日期:2013-12-25 18:36:00摩羯座
日期:2014-09-02 17:00:55
17 [报告]
发表于 2014-07-23 13:44 |只看该作者
...额...不该说“化简”的....斑竹想的啥方法啊?

论坛徽章:
11
巨蟹座
日期:2013-12-23 11:12:14双子座
日期:2014-08-28 09:14:55子鼠
日期:2014-07-25 16:21:22摩羯座
日期:2014-07-23 15:17:47摩羯座
日期:2014-05-30 13:09:05午马
日期:2014-04-30 18:10:00天秤座
日期:2014-04-25 12:12:00申猴
日期:2014-04-22 11:30:15午马
日期:2014-03-07 16:06:40辰龙
日期:2013-12-25 18:36:00摩羯座
日期:2014-09-02 17:00:55
18 [报告]
发表于 2014-07-23 13:44 |只看该作者
我只是感觉这个太麻烦了:wink:

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
19 [报告]
发表于 2014-07-23 13:58 |只看该作者
Susake_ 发表于 2014-07-23 13:24
再一次说明化简是不可能的


为什么不可能呀?
任意两个圆的等率膨胀交点组成一个椭圆(直接化简公式,得出的也是 a*(x-b)^2 + c*(y-d)^2 = e )
现在的问题就变成了求两个椭圆的交点。(直接方程组求解,得出的也是一个一元次方程)

难点在于,这个公式有点长,我是没耐心和时间一步步演算下去。

论坛徽章:
11
巨蟹座
日期:2013-12-23 11:12:14双子座
日期:2014-08-28 09:14:55子鼠
日期:2014-07-25 16:21:22摩羯座
日期:2014-07-23 15:17:47摩羯座
日期:2014-05-30 13:09:05午马
日期:2014-04-30 18:10:00天秤座
日期:2014-04-25 12:12:00申猴
日期:2014-04-22 11:30:15午马
日期:2014-03-07 16:06:40辰龙
日期:2013-12-25 18:36:00摩羯座
日期:2014-09-02 17:00:55
20 [报告]
发表于 2014-07-23 14:21 |只看该作者
bruceteen 发表于 2014-07-23 13:58
为什么不可能呀?
任意两个圆的等率膨胀交点组成一个椭圆(直接化简公式,得出的也是 a*(x-b)^2 + c*( ...


过几天,试试看~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP