已知直线过两点(w/2,h/4) (w/4,h/2),根据下面,大神们帮我详细解释下K和B是怎么算的?

梅明子 2014-12-23 02:34:13
设经过这两点的直线方程为:y=kx+b
将(w/2,h/4),(w/4,h/2)代入上面的方程,建立方程组
h/4=k×w/2+b
h/2=k×w/4+b
解上面的方程组,得:k=-h/w,b=3h/4
∴直线方程为:y=(-h/w)x+3h/4


上面是人家写好的,现在我主要是K和B不知道是怎么算来的,实在不解!不要说那些一套一套的,或者很抽象的话。你就告诉我思路,也就是说怎么一步一步算到k=-h/w ,b=3h/4的,我就主要这里看不懂!谢谢!
...全文
131 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
梅明子 2014-12-23
  • 打赏
  • 举报
回复
引用 8 楼 lxfhjjsfq 的回复:

	private void getLine(float x1, float y1, float x2, float y2){
		float k = (y2 - y1) / (x2 - x1);
		float b = y1 - k * x1;
		//y = k * x + b;
	}
x2 != x1,如果垂直于x轴的话就不用这么麻烦了
你上次给我写的那个三角形模板的,移动和缩放的时候不会判断边界越界的问题,你能帮到我吗?
梅明子 2014-12-23
  • 打赏
  • 举报
回复
引用 8 楼 lxfhjjsfq 的回复:

	private void getLine(float x1, float y1, float x2, float y2){
		float k = (y2 - y1) / (x2 - x1);
		float b = y1 - k * x1;
		//y = k * x + b;
	}
x2 != x1,如果垂直于x轴的话就不用这么麻烦了
这个漂亮!省时省心又省力!哈哈!我只需要在直线下方就判断y>这个方法返回值,在直线上方就y<这个方法返回值 就OK了!
_xianfeng99 2014-12-23
  • 打赏
  • 举报
回复

	private void getLine(float x1, float y1, float x2, float y2){
		float k = (y2 - y1) / (x2 - x1);
		float b = y1 - k * x1;
		//y = k * x + b;
	}
x2 != x1,如果垂直于x轴的话就不用这么麻烦了
梅明子 2014-12-23
  • 打赏
  • 举报
回复
引用 4 楼 lxfhjjsfq 的回复:
我去,我还搞复杂了。。。
这样吧!你能写一个通用的方法给我吗?参数为点1和点2,完了我再慢慢学习下以前的这些知识。现在项目紧
_xianfeng99 2014-12-23
  • 打赏
  • 举报
回复
2,3楼的简单点,总是就一个目的: 先消去一个未知数k或b,得出的k或b带入其中的一个式子就可以了
梅明子 2014-12-23
  • 打赏
  • 举报
回复
引用 1 楼 lxfhjjsfq 的回复:
又是你。。。 A.h/4=k*w/2+b B.h/2=k*w/4+b 二元一次方程,h,w已知,求k和b.(其实你可以把k和b假设成一个数就行了) 1.A式*2得: C.h / 2 = k*w + 2b; 2.C式 - B式得: 0 = k * w * 3 / 4 + b;然后得出b = - k * w * 3 / 4; 3.将得出的b带入A或B就能得出k,如带入A h / 4 = k * w / 2 - k * w * 3 / 4; h / 4 = - k * w / 4; k = - h / w; 4.把k = -h / w带入b = -k * w * 3 / 4得: b = -(-h / w) * w * 3 / 4; b = 3 * h / 4; 只此一次了,查一下二元一次方程。自己多写几个图像然后练练就行,把思想转换过来即OK了。
是我啊,怎么了?你这个我表示真看不懂,咋整?
_xianfeng99 2014-12-23
  • 打赏
  • 举报
回复
我去,我还搞复杂了。。。
绝对在乎妮 2014-12-23
  • 打赏
  • 举报
回复
A:h/4=k×w/2+b B:h/2=k×w/4+b B*4-A*4即: 2h-h=(kw+4b)-(2kw+4b) h=-kw 得k=-h/w 把中代回A中即可算出b的值
春华-秋实 2014-12-23
  • 打赏
  • 举报
回复
不明白,你是要它实现的算法,还是简单解方程组。 h/4=k×w/2+b -----1 h/2=k×w/4+b -----2 2-1 得 h/4 = -kw/4 变换得 -h/w = k 将结果代入得出b 方程得解。
_xianfeng99 2014-12-23
  • 打赏
  • 举报
回复
又是你。。。 A.h/4=k*w/2+b B.h/2=k*w/4+b 二元一次方程,h,w已知,求k和b.(其实你可以把k和b假设成一个数就行了) 1.A式*2得: C.h / 2 = k*w + 2b; 2.C式 - B式得: 0 = k * w * 3 / 4 + b;然后得出b = - k * w * 3 / 4; 3.将得出的b带入A或B就能得出k,如带入A h / 4 = k * w / 2 - k * w * 3 / 4; h / 4 = - k * w / 4; k = - h / w; 4.把k = -h / w带入b = -k * w * 3 / 4得: b = -(-h / w) * w * 3 / 4; b = 3 * h / 4; 只此一次了,查一下二元一次方程。自己多写几个图像然后练练就行,把思想转换过来即OK了。
PART1 引入 因为刚刚沐浴完入学的洗礼晋级到新的级别不久,杂事挺多的,所以也没怎么逛论坛,距离上一篇 低多边形运动(LowPolyMotion)法 的帖子发布至今也有挺长一段时间了没露面了。今天就再奉上一帖,和大家交流切磋。 刚正式接触线性代数这门学科不到两个月,觉得课堂上的线代实在枯燥。好在有幸遇见国外3Blue1Brown大神的线代解析,使得对线性变换的几何意义初有体会。在对这种美妙变换的感慨之余也不忘用自己动手,尝试独创法实现这种变换的图形化渲染。 我将整个程序写成了可交互式的即时演动画。 其实是个半半成品,嗯...主要原因是交互性还比较单一。 目前完成了基向量添加、自定义向量添加、矩阵×矩阵动画演、矩阵×向量动画演、两种副本网格模式、两种动画预览模式,上图演示的就是基向量和自定义向量的添加。其实单动画本身而言,除了好看和能够助更形象地理解线性变换以及明白低阶矩阵运的几何本质之外也没啥别的意义了,但是这种交互式的编程动画还是挺有意思的,也有一定的学习价值,特此开源。 PART2 演示 ↑ 添加基向量与自定义向量 ↑ ↑ 观察基向量变换 ↑ PART3 简析 这一部分简单分析一下这个法的内容,或者说解析一下源码吧,因为之前也有发一些这类的帖子,但是反应大多是看不太懂,因此我也打在以后的帖子中都对源码做一下大致的剖析。要实现这种动画主要分成四大部分 来看,有兴趣的话就让我们就一起来看看吧。 一、坐标系部分 在这个项目中坐标系可以说是整个动画最有看点的部分了。所有变换的美感都在坐标系网格的拉伸中体现得淋漓尽致。 1 .1搭建一个可变换的坐标系,即要搭建一个可变换的网格,网格由许多条横纵线条组成,为了绘制这些线条,我们只需要确定每一根线条的左右端点的坐标 即可。此外我们还需要确定坐标轴的单位长度,以及坐标原点的位置,为此,程序中定义了两个数据类型,用于存放坐标系的基本参数,分别是CoordinateSystemParam和CoordinateGroup。 通过画板的宽高和单位长度,不难确定Line_X和Line_Y的值,再设定一下颜色,通过循环调用画板的画直线命令很容易画出动图中的坐标系。 二、缓动函数部分 2 .1为了让我们的坐标系动起来只需要让端点动起来即可,计出运动的始末位置后利用循环的方法来达到缓动的目的。例如做一个循环n次使得点P0从(x1,y1)位置运动到(x2,y2)位置的动画,只需要在第i次循环的时候将点P0从x1位置移动到x1+(x2-x1)×k位置即可,其中k=i/n。 2 .2为了使得动画更加平滑,我们借助正弦函数对线性数据进行“软化”。 考虑到实际需求,我们仅截取正弦函数的[-π/2,π/2]区间。通过f(i)=π×i/n-π/2即可将i∈[0,1]映射到f(i)∈[-π/2,π/2],这样一来我们就可以得到sin(f(i))∈[-1,1],为了使得比例值k依旧从0开始到1结束,不难发现只需令k=[sin(f(i))+1]/2,即k=[sin(π×i/n-π/2)+1]/2 。这一技法贯穿整个程序动画,如果要实现更加复杂的缓动效果,可以参阅网上的其他资料,或调用现成的缓动函数。 三、向量箭头部分 3 .1两点确定一条直线,那么如何画出向量的矢量箭头?本程序中使用在原直线两侧再画两根短线段的方法来实现,为了达到目的,只需要确定直线倾斜角α、箭头开角β以及线段长度L即可。L在图中没有标出,L=|P0P1|或|P0P2|。 以计点P1的坐标为例,首先α=arctan(y0/x0), 由几何关系不难发现∠EP0D=π/2-α-β,进而易得P1到直线DP0的距离d=Lcos(α-β),代入x1=x0-d得到P1的横坐标为x1=x0-Lcos[arctan(y0/x0)-β],同理y1=y0-Lsin[arctan(y0/x0)-β],考虑到L与β都是我们自定义的已知量,当P0确定后,P1与P2的坐标也就确定了。值得注意的是x=x0±d的正负号具体由箭头所处的象限来指定 ,具体规则见源码的CoordinateSystemDraw函数。 确定了箭头三点的坐标后(P0,1,2),结合第二节缓动部分即可完成向量箭头的生成和移动动画。 四、运表达式部分 4 .1运表达式部分即矩阵乘法式的动态显示部分。略,详见源码。 ↑ 观察自定义向量的变换(Vector的坐标跟随箭头所在处渐显)↑ ↑ 伸缩变换及张成空间的"降维" ↑

80,354

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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