明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: masterlong

[讨论] 周末,出个题目给大家挑战下

[复制链接]
发表于 2015-11-18 03:58:41 | 显示全部楼层
本帖最后由 xyp1964 于 2015-11-18 04:23 编辑

;(goodline s1 s2 宽度系数)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

演示效果非常完美,赞一个  发表于 2015-11-19 21:45
回复

使用道具 举报

发表于 2015-11-18 09:09:30 | 显示全部楼层
哈哈,看来楼主是个完美主义者啊
回复

使用道具 举报

 楼主| 发表于 2015-11-19 22:09:54 | 显示全部楼层
本帖最后由 masterlong 于 2015-11-19 22:16 编辑

院长的演示相当完美
必须要赞一个

简单说说以前我对此问题的一些思考
看截图


先讨论两图块平行的情况
任选图块之一作为主块
以距图块长轴距离为L做一直线
以长边的1/4点做一个角度为A的区域划分线
如图中虚线所示
对于两个4点表而言
其实可以简化为2个2点表
如图中紫红色点所示

做了区域划分线以后
如果点P2A、B都在区域线之内
那么连接点为P1A、P2A
如果点P2A、B都在区域线之外
那么连接点为P1B、P2B
如果P2A、P2B分别在区域线两侧
那么连接点为P1A、P2B

按以上原则
对于两图块平行的情况
可以得到很好的连接效果
对于互相垂直的情况
分别调整A与L具体数值
同时两块分别假定为主块进行验算
最后也能得到理想的结果
对于两图块成一定角度
或者图块大小不一的情况
确定最优连线的计算过程类似

一直不能让我满意的
是整个计算很有点繁琐
程序代码里面
cond套cond
L与A的具体数值调整起来很麻烦
经常会出现顾此失彼的情况

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2015-11-19 22:17:22 | 显示全部楼层
编辑以后怎么删除错误的图片啊[em0]
回复

使用道具 举报

发表于 2015-11-20 08:00:18 | 显示全部楼层
masterlong 发表于 2015-11-19 22:17
编辑以后怎么删除错误的图片啊

图片下方有个"删除" ,点击即可
回复

使用道具 举报

 楼主| 发表于 2015-11-22 12:01:28 | 显示全部楼层
院长给出了思路
感觉比我所采用的方法
更为精准
由于最近比较忙
还没来得及仔细研究
暂不能判断该方法的扩展性如何
因为我有很多特殊的应用
本帖仅列举了其中一类
无论如何
院长的思路都是超赞的
回复

使用道具 举报

 楼主| 发表于 2015-11-22 12:53:31 | 显示全部楼层
本帖最后由 masterlong 于 2015-11-22 13:04 编辑

说说我现在所采用的方法
看截图


最早使用的是最小距离原则
现在引入换算长度的概念
所谓换算长度
除两点间距离外
再分别计算两点至各自块心的距离
并乘以一个系数k
以图中绿色虚线为例
整个换算长度=L1B*k+L1B2A+L2A*k
k的取值对最终连接效果影响很大
基本的规律是
k增大时连接点趋向于靠近形心
k减小时连接点趋向于远离形心
K=0时的换算长度即两点的实际距离
针对我的应用而言k=0.5~0.8之间比较合适
实际取值k=0.65
这种方法的优点是计算过程比较简单
相比前两贴所采用的方法
整个代码简洁的不是一点半点
实际效果能满足我的需要
  1. 以下是本帖我的程序中goodline子函数的代码
  2. (defun goodline( plist1 plist2 / midpo1 midpo2 mindi pa pb tmp k )
  3.   (setq mp1 (getboxmidpo__2 aptlist))
  4.   (setq mp2 (getboxmidpo__2 bptlist))

  5.   (setq k 0.65)
  6.   (setq mindi 1e100)
  7.   (foreach x plist1
  8.     (foreach y plist2
  9.       (if (< (setq tmp (1234dist mp1 x y mp2 k)) mindi)
  10.         (setq pa x  pb y  mindi tmp)
  11.       )
  12.     )
  13.   )
  14.   (drawline pa pb 3)
  15. )
  16. ;;求4点转换长度
  17. ;;若k=0,即求p2 p3间的距离
  18. ;;k值大,连接点趋向于靠近形心
  19. ;;k值小,连接点趋向于远离形心
  20. ;;临界点啊啥的,应该跟矩形的大小、长宽比有关系,没具体研究
  21. ;;对我的实际应用来说,k=0.5~0.8,是比较合适的取值
  22. (defun 1234dist( p1 p2 p3 p4 k )
  23.   (+ (* k (distance p1 p2)) (distance p2 p3) (* k (distance p3 p4)))
  24. )
这个方法和院长的方法相比
某些情况下的连线效果略有不足
它对我个人而言最大的意义
在于它的适用性比较高
很多特殊的要求都可以借助它来实现
看下面截图


图中是一个房间内插座布置的几种相对关系
云线圈出的两插座处于同一面墙
绿色连续PL线是我希望的自动连线
当采用最小距离原则
一半的连线将如虚线所示
以前为解决此问题
插座的连接点如旁边的放大图设置了三个很近的点
而现在引入换算长度算法以后
连接点为两个
只需要设置k=-0.1即可

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2015-11-22 19:42:43 | 显示全部楼层
同一墙面的,这样连接是不是更美观一点呢
直接在画圈圈的那个位置加一个点,就可以很完美的解决了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2015-11-22 21:59:32 | 显示全部楼层
这个是个人的绘图习惯
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-21 01:03 , Processed in 0.163794 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表