clc; clear;

%% ============================
%  INPUT CAM LIFT DATA (mm)
%% ============================

lift = [
0.082892
0.083808
0.0947
0.100568
0.111412
0.117232
0.128028
0.1388
0.159548
0.180272
0.200972
0.221648
0.2323
0.252928
0.273532
0.294112
0.314668
0.3302
0.345708
0.376192
0.386652
0.407088
0.4275
0.447888
0.468252
0.478592
0.508908
0.5292
0.544468
0.559712
0.579932
0.610128
0.6353
0.660448
0.690572
0.730672
0.770748
0.8308
0.870828
0.920832
0.990812
1.050768
1.1207
1.200608
1.290492
1.380352
1.470188
1.56
1.659788
1.769552
1.879292
2.019008
2.1387
2.278368
2.408012
2.557632
2.727228
2.8868
3.046348
3.225872
3.415372
3.594848
3.8143
4.023728
4.253132
4.462512
4.671868
4.9512
5.220508
5.459792
5.729052
6.028288
6.2975
6.546688
6.825852
7.104992
7.364108
7.5832
7.782268
7.931312
8.040332
8.149328
8.1983
8.157248
8.076172
7.925072
7.723948
7.5328
7.301628
7.040432
6.769212
6.517968
6.2267
5.965408
5.664092
5.402752
5.131388
4.88
4.608588
4.387152
4.155692
3.924208
3.7327
3.511168
3.339612
3.148032
2.976428
2.7948
2.623148
2.481472
2.339772
2.208048
2.0763
1.944528
1.832732
1.700912
1.579068
1.4772
1.375308
1.293392
1.221452
1.119488
1.0475
0.985488
0.913452
0.841392
0.789308
0.73
0.687812
0.645648
0.593508
0.571392
0.5493
0.527232
0.505188
0.483168
0.461172
0.4442
0.422252
0.405328
0.383428
0.361552
0.3397
0.317872
0.306068
0.284288
0.262532
0.2458
0.229092
0.207408
0.185748
0.174112
0.1525
0.140912
0.119348
0.107808
0.096292
0.0948
];

%% =====================================================
%  CAM → VALVE LIFT TRANSFORMATION (PAGE 75 METHOD)
%% =====================================================

R = 13;       % base circle radius (mm) — adjust if needed
c = 0.2;     % tappet clearance (mm)

s = (lift + R)';   % total cam radius at each angle
Valve_lift = zeros(1, length(s));

for phi = 1:length(s)
    ymax = 0;

    for theta = 1:length(s)
        angle = 180 - (theta + phi);
        y = s(theta) * -cosd(angle);

        if y > ymax
            ymax = y;
        end
    end

    Valve_lift(phi) = ymax - R - c;
end

Valve_lift = Valve_lift';

%% OUTPUT
disp("VALVE LIFT PROFILE (mm):");
disp(Valve_lift);
