这种情形应该如何缩放“坐标系”而不是“缩放图”

global_biz2 2016-10-09 03:28:30
Hi,

下面是一张用自定义坐标系画出来的效果图,我们知道给定一张图,用 API 可以对图进行放大缩小就可以把图缩放到指定的大小,如将下面的图的整个大小缩放到图中蓝色部分的大小。

但是,假设我不是要对整个画出来的图进行缩放,而是要求图中的每一个图形自动缩放到不能超出蓝色部分的区域,这个时候应该如何对自定义坐标系里面的图进行缩放才能达到这个效果??

因为各个图形的原点不一致, 给定它一个原点,它画出来的有些只是原点上方多出一部分,有此只是原点下方多出一部分,而有些是原点的上下方都多出一部分,

这个时候,坐标系应该如何告诉每一个图形的原点在哪?我是想最终出来的图不用 API 缩放就能达到全部图形在蓝色框内,并且最重要的一点是经过这种方式缩放后,各个图形在彼此之间的比例与相对位置还能保持原未缩放前的一致。

谢谢。

...全文
663 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
global_biz2 2016-10-20
  • 打赏
  • 举报
回复
引用 13 楼 yan_hyz 的回复:
[quote=引用 12 楼 global_biz2 的回复:] [quote=引用 11 楼 yan_hyz 的回复:] 一般情况下 api 都有 方法让你传递指定的参数,实现 转换,不用 自己去 进行 矩阵计算
它好像只提供传递整个 3 * 3 矩阵的结果进 API 进行转换,目前还搞不清楚如何计算 3 * 3 矩阵的逻辑。 现有的 API 旋转只能将整个正方形或长方形的正面 旋转 45 度,而不能将正面旋转出投影的 45 度。可能需要找时间搞清楚 3 * 3 矩阵的逻辑才能画这个椭圆了。[/quote] 这些我就不懂了............[/quote] 现在先结贴了,难的以后再找时间研究,再次感谢。
猴头 2016-10-17
  • 打赏
  • 举报
回复
引用 12 楼 global_biz2 的回复:
[quote=引用 11 楼 yan_hyz 的回复:] 一般情况下 api 都有 方法让你传递指定的参数,实现 转换,不用 自己去 进行 矩阵计算
它好像只提供传递整个 3 * 3 矩阵的结果进 API 进行转换,目前还搞不清楚如何计算 3 * 3 矩阵的逻辑。 现有的 API 旋转只能将整个正方形或长方形的正面 旋转 45 度,而不能将正面旋转出投影的 45 度。可能需要找时间搞清楚 3 * 3 矩阵的逻辑才能画这个椭圆了。[/quote] 这些我就不懂了............
global_biz2 2016-10-13
  • 打赏
  • 举报
回复
引用 11 楼 yan_hyz 的回复:
一般情况下 api 都有 方法让你传递指定的参数,实现 转换,不用 自己去 进行 矩阵计算
它好像只提供传递整个 3 * 3 矩阵的结果进 API 进行转换,目前还搞不清楚如何计算 3 * 3 矩阵的逻辑。 现有的 API 旋转只能将整个正方形或长方形的正面 旋转 45 度,而不能将正面旋转出投影的 45 度。可能需要找时间搞清楚 3 * 3 矩阵的逻辑才能画这个椭圆了。
猴头 2016-10-12
  • 打赏
  • 举报
回复
一般情况下 api 都有 方法让你传递指定的参数,实现 转换,不用 自己去 进行 矩阵计算
猴头 2016-10-11
  • 打赏
  • 举报
回复
绘制矩形之前,备份 坐标系副本,然后旋转变形,绘制对应的举行和椭圆,绘制完成之后在还原备份的副本,继续绘制剩下的图形
猴头 2016-10-10
  • 打赏
  • 举报
回复
即使不都是左下角的点,如果是决定每个 图形位置的点,也可以直接乘以 缩放比例,缩放之后的位置 就得到了。 宽高 分别乘以 缩放比例,就是缩放之后的大小了
猴头 2016-10-10
  • 打赏
  • 举报
回复
有XY width height 四个顶角的坐标就知道了 xy 是 哪个点? 每个图形的左下角的点吗?那就可以理解为 每个图形 自身的 原点,如果这样,就是这个xy 分别 乘以 计算出来的缩放比例,知道每个图形的 宽高 height width,就不用 求各个顶点的坐标了,直接让 height width 分别乘以 缩放比例 就行了
global_biz2 2016-10-10
  • 打赏
  • 举报
回复
引用 8 楼 yan_hyz 的回复:
这个 涉及到 坐标系的转换了,主要是坐标系旋转
Java 坐标系旋转有专门的类,但是它会把整个正面旋转了 45 度,也就是说左下角会向上,底边这个时候就不是与 X 轴平行。 它好像是用了 3 X 3 矩阵来旋转,可能需要改这个 3 X 3 矩阵,但不知如何改。 如何处理?
global_biz2 2016-10-10
  • 打赏
  • 举报
回复
global_biz2 2016-10-10
  • 打赏
  • 举报
回复
引用 3 楼 yan_hyz 的回复:
即使不都是左下角的点,如果是决定每个 图形位置的点,也可以直接乘以 缩放比例,缩放之后的位置 就得到了。

宽高 分别乘以 缩放比例,就是缩放之后的大小了


谢谢,用这种方法现在已经可以缩放了。

可否顺便帮我看一下这个椭圆的 y 为什么等于 NaN,我还是搞不清楚如何获取到椭圆上所有点的坐标。

其实通过 Java 自带的 drawOval 可以画出一个内切四边形的椭圆(也就是上图中每一个矩形的内切椭圆),但是我需要将椭圆作一个投射的处理,而要实现投射必须先获取到椭圆上每一个点, 类似于缩放但不相同。

如果不用投射方法的话,现在还找不到如何画一个在四边形投射影子上画一个椭圆的方法。

就是要在下面这张图的顶部的斜 45 的面上画一个椭圆, 所有点的坐标全部知道,不知根据椭圆方程式画不画得出来。
感觉你的理论比较强,请帮忙看一下,谢谢。




猴头 2016-10-10
  • 打赏
  • 举报
回复
这个 涉及到 坐标系的转换了,主要是坐标系旋转
global_biz2 2016-10-10
  • 打赏
  • 举报
回复
引用 6 楼 yan_hyz 的回复:
如果知道 p1 3 5 7 四个点的坐标, 那么 画椭圆, 就是在这四个点决定的矩形范围内 画椭圆了,不需要椭圆的方程式来计算各个点.....
上面已经在 P1, P3, P5, P7 里面画出椭圆了,用 DrawOval 画的。 但是现在是要在 P2, P3, P6, P7 这个里面画椭圆,没有椭圆方程序式好像画不出来。Java API 只能画正方形的内切椭圆不能画上面要求的区域里面画椭圆, 请再看下,谢谢。
猴头 2016-10-10
  • 打赏
  • 举报
回复
如果知道 p1 3 5 7 四个点的坐标, 那么 画椭圆, 就是在这四个点决定的矩形范围内 画椭圆了,不需要椭圆的方程式来计算各个点.....
global_biz2 2016-10-09
  • 打赏
  • 举报
回复
Hi yan_hyz, 因一开始觉得有点难可能没回复就直接结贴了,我把你在下面贴子中的回复复制到这里面来,继续问,顺便给分。谢谢。 图中所有点的坐标及高宽点的位置都知道,唯一跟你说的不同的是,那些矩形全部是由 Rectangle2D.Double 画出来的,也就是说那些矩形只能获取到 x, y 及 width & height, 而不能知道组成矩形的线的每一个点,所以,可能用你的方法不行。 http://bbs.csdn.net/topics/392029101 每个图形 都是通过给定的点的坐标 画线? 我日,刚刷新下帖子给结贴了~~~ 你说我还继续说不说??? 1、所有图形的整体所在的矩形宽高 知道吗?能计算吗? 2、蓝色区域的宽高知道吗?能计算吗? 1 2 都能,就知道了 需要缩放的比例是多少,假设是 a 1、是不是XY 轴交点的坐标知道? 2、是不是 每个图形的 位置(各个图形的原点)知道? 3、每个图形 是根据定义好的若干个点画出来的?那么 这若干个点的坐标肯定也知道, 缩放,不用计点的平移坐标,每个点的 原点坐标和 各个 围绕着原点的画线的点的坐标直接 * a 就实现了缩放了。 每个图形的相对位置一致,间距比例也是一致的。

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧