开发过程中用不到一元一次方程吗?非也,iOS开发中经常会遇到根据某个ScrollView动态偏移量的值来实时设置一个View的透明度,你敢说你不用一元一次方程你能搞定?

想把一个动画效果做好,经常会遇到实时设置的问题,本人遇到过多次,总结出经验,提供方法来专门计算一元一次方程的K值以及b值,方便开发.

BinaryLinearEquation.h + BinaryLinearEquation.m  提供内联函数以及类方法

//  Copyright (c) 2014年 Y.X. All rights reserved.
//#import <Foundation/Foundation.h>NS_INLINE CGFloat calculateSlope(CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2)
{return (y2 - y1) / (x2 - x1);
}NS_INLINE CGFloat calculateConstant(CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2)
{return (y1*(x2 - x1) - x1*(y2 - y1)) / (x2 - x1);
}@interface BinaryLinearEquation : NSObject/*** 计算一元一次方程的斜率 K** Y = kX + b,输入两个点坐标的值(x1, y1), (x2, y2)来计算斜率k的值** @param 坐标值 两个点的坐标值(x1, y1), (x2, y2)* @return 计算得出的斜率值*/
+ (CGFloat)calculateSlopeWithX1:(CGFloat)x1 Y1:(CGFloat)y1 X2:(CGFloat)x2 Y2:(CGFloat)y2;/*** 计算一元一次方程的常数 b** Y = kX + b,输入两个点坐标的值(x1, y1), (x2, y2)来计算常数b的值** @param 坐标值 两个点的坐标值(x1, y1), (x2, y2)* @return 计算得出的常数值*/
+ (CGFloat)calculateConstantWithX1:(CGFloat)x1 Y1:(CGFloat)y1 X2:(CGFloat)x2 Y2:(CGFloat)y2;@end
//  Copyright (c) 2014年 Y.X. All rights reserved.
//#import "BinaryLinearEquation.h"@implementation BinaryLinearEquation+ (CGFloat)calculateSlopeWithX1:(CGFloat)x1 Y1:(CGFloat)y1 X2:(CGFloat)x2 Y2:(CGFloat)y2
{return (y2 - y1) / (x2 - x1);
}+ (CGFloat)calculateConstantWithX1:(CGFloat)x1 Y1:(CGFloat)y1 X2:(CGFloat)x2 Y2:(CGFloat)y2
{return (y1*(x2 - x1) - x1*(y2 - y1)) / (x2 - x1);
}@end

测试:

y = 7x - 9

k = 7

b = -9

两个点(0, -9),(9/7, 0)

---------------------------------------------------------------------------------------------

NSLog(@"%f", calculateSlope(0.f, -9.f, 9.f/7.f, 0.f));
    NSLog(@"%f", calculateConstant(0.f, -9.f, 9.f/7.f, 0.f));
    
    NSLog(@"%f", [BinaryLinearEquation calculateSlopeWithX1:0.f     Y1:-9.f
                                                         X2:9.f/7.f Y2:0.f]);
    NSLog(@"%f", [BinaryLinearEquation calculateConstantWithX1:0.f     Y1:-9.f
                                                            X2:9.f/7.f Y2:0.f]);

---------------------------------------------------------------------------------------------

2014-03-28 09:46:00.898 woobooWall[1440:60b] 7.000000
2014-03-28 09:46:00.899 woobooWall[1440:60b] -9.000000
2014-03-28 09:46:00.899 woobooWall[1440:60b] 7.000000
2014-03-28 09:46:00.899 woobooWall[1440:60b] -9.000000

使用时请将数据转换为CGFloat型.

附录1:

附录2:

根据一元一次方程组计算所有的红绿蓝透明度的斜率以及常数值

CalculateColor.h + CalculateColor.m

//
//  CalculateColor.h
//  Animation
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//#import <Foundation/Foundation.h>typedef struct ColorParam {CGFloat redSlope;         // 红色的斜率 kCGFloat redConstant;      // 红色的常数 bCGFloat greenSlope;       // 绿色的斜率 kCGFloat greenConstant;    // 绿色的常数 bCGFloat blueSlope;        // 蓝色的斜率 kCGFloat blueConstant;     // 蓝色的常数 bCGFloat alphaSlope;       // 透明度的斜率 kCGFloat alphaConstant;    // 透明度的常数 b} SColorParam;/**根据一元一次方程组计算所有的红绿蓝透明度的斜率以及常数值这是用来设计做动态设定动画效果的,需要提供起始点的UIColor,起始点的一个值,终点的UIColor,终点的一个值,然后计算出动画过程中需要的一些设置参数.@param oldColor 起始点的color@param oldPoint 起始点的值@param newColor 终点的color@param newPoint 终点的值@param param 计算好的值存储于结构体SColorParam中@return none*/
void calculateUIColorAndPoint(UIColor *oldColor,CGFloat oldPoint,UIColor *newColor, CGFloat newPoint,SColorParam *param);
//
//  CalculateColor.m
//  Animation
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//#import "CalculateColor.h"#pragma mark - 计算斜率 k
CGFloat calculateSlope(CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2)
{return (y2 - y1) / (x2 - x1);
}#pragma mark - 计算常数 b
CGFloat calculateConstant(CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2)
{return (y1*(x2 - x1) - x1*(y2 - y1)) / (x2 - x1);
}#pragma mark - 根据一元一次方程组计算所有的红绿蓝透明度的斜率以及常数值
void calculateUIColorAndPoint(UIColor *oldColor,CGFloat oldPoint,UIColor *newColor, CGFloat newPoint,SColorParam *param)
{// 获取旧颜色CGFloat oldRed    = 0;CGFloat oldGreen  = 0;CGFloat oldBlue   = 0;CGFloat oldAlpha  = 0;[oldColor getRed:&oldRed green:&oldGreen blue:&oldBlue alpha:&oldAlpha];// 获取新颜色CGFloat newRed    = 0;CGFloat newGreen  = 0;CGFloat newBlue   = 0;CGFloat newAlpha  = 0;[newColor getRed:&newRed green:&newGreen blue:&newBlue alpha:&newAlpha];// 计算每一个k值和b值param->redSlope       = calculateSlope(oldPoint, oldRed, newPoint, newRed);param->redConstant    = calculateConstant(oldPoint, oldRed, newPoint, newRed);param->greenSlope     = calculateSlope(oldPoint, oldGreen, newPoint, newGreen);param->greenConstant  = calculateConstant(oldPoint, oldGreen, newPoint, newGreen);param->blueSlope      = calculateSlope(oldPoint, oldBlue, newPoint, newBlue);param->blueConstant   = calculateConstant(oldPoint, oldBlue, newPoint, newBlue);param->alphaSlope     = calculateSlope(oldPoint, oldAlpha, newPoint, newAlpha);param->alphaConstant  = calculateConstant(oldPoint, oldAlpha, newPoint, newAlpha);
}

以下是实现动态改变颜色的方法

#import "YX_2_ViewController.h"
#import "CalculateColor.h"@interface YX_2_ViewController ()<UIScrollViewDelegate>@property (strong, nonatomic) UIScrollView  *mainScrollView;@end@implementation YX_2_ViewController- (void)viewDidLoad
{[super viewDidLoad];_mainScrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];_mainScrollView.contentSize = CGSizeMake(self.view.bounds.size.width * 2,self.view.bounds.size.height);_mainScrollView.backgroundColor = [UIColor cyanColor];_mainScrollView.delegate = self;[self.view addSubview:_mainScrollView];
}- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{static SColorParam paramVe2 = {0};// 只计算一次static int flag = 0;if (flag == 0) {calculateUIColorAndPoint([UIColor cyanColor],0,[UIColor redColor],320, ¶mVe2);flag = 1;}UIColor *color =[UIColor colorWithRed:scrollView.contentOffset.x * paramVe2.redSlope + paramVe2.redConstantgreen:scrollView.contentOffset.x * paramVe2.greenSlope + paramVe2.greenConstantblue:scrollView.contentOffset.x * paramVe2.blueSlope + paramVe2.blueConstantalpha:1];scrollView.backgroundColor = color;
}@end

计算一元一次方程Y=kX+b相关推荐

  1. java算法计算一元一次方程

    java算法计算一元一次方程是昨年10月写的了,最近想写写算法就把它整理出来了. 核心思想是将方程转化为:aX+b = cX+d 的形式再进行计算,转化的思想是根据符号的优先级一层一层的分割.分割规则 ...

  2. python计算一元一次方程的根_5-2 一元二次方程

    前言 我们已经学习了二次函数的一般式和顶点式,顶点式展开之后就是一般式,那么一般式能变成顶点式吗? 如果我们能把一般式转换为顶点式,那么我们就可以轻松找到二次函数的顶点,从而很容易画出二次函数. 这个 ...

  3. Java解一元一次方程,一元二次方程,一元三次方程

    /*** @author Along* @desc 一元三次方程,二次方程,和一次方程求解工具类*/ public class EquationCalculation {/* 计算一元三次方程最大实根 ...

  4. C语言笔记 | 一元一次方程

    文章目录 0x00 前言 0x01 问题分析 0x02 代码设计 0x03 完整代码 0x04 运行效果 0x05 参考文献 0x06 总结 0x00 前言 一元一次方程指只含有一个未知数.未知数的最 ...

  5. c++中计算2得n次方_七上,一元一次方程,知识点综合学霸笔记在手

    一元一次方程的解 定义:使一元一次方程左右两边相等的未知数的值叫做一元一次方程的解. 把方程的解代入原方程,等式左右两边相等. 解一元一次方程 (1)解一元一次方程的一般步骤: 去分母.去括号.移项. ...

  6. 一元一次方程计算机在线,100道一元一次方程计算题41078.doc

    PAGE 一元一次方程计算训练(要求:认真.仔细.准确.灵活) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.5(2x-1)-3(3x-1)-2(5x-1)+1=0 13 ...

  7. 线性代数 --- 投影与最小二乘 上(一元一次方程组的最小二乘解与向量在一维子空间上的投影)

    向量在子空间上的投影与最小二乘逼近 对于一个mxn的非齐次线性方程组Ax=b而言,他可能有解,也可能没有解.如果A中各列通过线性组合可以得到b, 或者说b在A的列空间中,则方程组有解,即方程组相容.反 ...

  8. 初一数学用计算机做题上册,初一上册数学实际问题与一元一次方程试题

    相信很多初一的学子都知道,掌握好正确的初一数学解题技巧,有利于我们提高数学考试成绩.现在请欣赏小编带来的初一数学实际问题与一元一次方程试题,在这些文字下希望对你会有所帮助! 初一上册数学实际问题与一元 ...

  9. UA MATH523A 实分析3 积分理论例题 Fubini定理计算一元积分

    UA MATH523A 实分析3 积分理论例题 Fubini定理计算一元积分 例 计算 ∫0∞e−sxsin⁡2(x)xdx\int_0^{\infty}e^{-sx}\frac{\sin^2(x)} ...

最新文章

  1. Operations Manager 2012 SP1配置部署系列之(二) SCOM监控SCVMM
  2. 这两天发现一个老外用JavaScript编写的好东西:dp.SyntaxHighlighter。
  3. SEP11备份与灾难恢复-官方文档
  4. new失败跟踪函数_WinDbg预览时间线:调试器中的时间线可以允许用户记录跟踪
  5. ASP.NET 2.0中的Session状态丢失的解决办法
  6. ICCV2021 香港理工、阿里达摩院提出RealVSR:视频超分任务中的新数据集与损失方案...
  7. NumPy基本操作快速熟悉
  8. spring mvc 基于表单的认证过程及cookie应用和session管理
  9. 深挖android low memory killer
  10. 广义表head tail 运算_双链表实现LRU缓存淘汰策略
  11. 学JS的心路历程 - JS应用
  12. 位姿矩阵求逆 (搬运)
  13. 逐像元地表反射率计算(GF4)
  14. STM32读写DS1302,HAL库方式
  15. 一套SpringBoot+VUE全平台支付系统源码
  16. html文本显示不完整,css 内容显示不全怎么办
  17. Antelope与 Barracude MYSQL 文件格式
  18. java-URL短连接的生成(保证生成的唯一性)
  19. html5点赞计数功能,点赞功能
  20. 浅谈动态规划 ——by cbw

热门文章

  1. 史上最简单的composer使用教程
  2. X79-UD5 BIOS
  3. 在高频交易领域中,为什么我们选择 Java 开发外汇算法交易系统?
  4. 康佳KKTV K32刷机
  5. 一条命令将windows下多个ts文件合并为一个ts文件
  6. Tess4J 图片文字识别
  7. 时间片轮转算法思想(java)
  8. (论文笔记07.Survivalism: Systematic Analysis of Windows Malware Living-Off-The-Land(CCF A)2021)
  9. 【协作MIMO+非规则LDPC】协作MIMO系统上,中继协作解码转发策略和编码协作策略,采用非规则LDPC编码
  10. 用 JS空格分隔手机号码 334格式