0% found this document useful (0 votes)
3 views6 pages

Control Point Modification and Rotation

Uploaded by

20103060
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views6 pages

Control Point Modification and Rotation

Uploaded by

20103060
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

clc; clear; close all;

%% === Step 1: Define Original Control Points ===


upper_cp = [
9.4866e-05 -0.0011563
0.005862 0.01116
0.0112 0.014493
0.017074 0.015589
0.028034 0.01735
0.12181 0.023797
0.23774 0.021358
0.42076 0.023313
0.45841 0.028926
0.46235 0.029719
];

lower_cp = [
9.4866e-05 -0.0011563
0.0035485 -0.0091313
0.007586 -0.013067
0.016653 -0.017347
0.036891 -0.025853
0.063068 -0.032909
0.087344 -0.036016
0.1696 -0.031535
0.37688 0.0027707
0.46235 0.027561
];

%% === Step 2: Flap Coordinates (unchanged) ===


flap1 = [
0.78138031 0.158624699
0.785287007 0.160151642
0.778551984 0.157524172
0.771809828 0.154914274
0.765066912 0.152309091
0.758330201 0.149686354
0.751608171 0.147026235
0.744904129 0.1443211
0.738212662 0.14158498
0.731519428 0.138853193
0.724805705 0.136172246
0.718054042 0.133588481
0.711253313 0.131136901
0.70440042 0.128835217
0.697497865 0.126687017
0.690550796 0.124687433
0.68356467 0.122828782
0.676544414 0.121103458
0.669494948 0.119501685
0.662421804 0.118007825
0.655331515 0.116597108
0.64823139 0.115236938
0.641127913 0.113894278
0.634025802 0.112544428
0.626926796 0.111178334
0.619829666 0.109801549
0.612732644 0.108426139
0.605633412 0.107061247
0.598532193 0.1057067
0.591430471 0.104354795
0.584329825 0.102997248
0.577230598 0.101632294
0.570131289 0.100267774
0.56302974 0.098914971
0.555924978 0.097579138
0.548818809 0.096250809
0.54171556 0.094906972
0.534619326 0.093526588
0.527530364 0.09210933
0.5204418 0.090690047
0.513342729 0.0893245
0.506227052 0.088048371
0.499100518 0.086833981
0.49198206 0.085573653
0.484891919 0.084163149
0.477823472 0.082646901
0.47072004 0.081306826
0.463624482 0.079925326
0.456548819 0.078466603
0.450934226 0.074170154
0.449018294 0.067328104
0.451595264 0.060682919
0.457628832 0.056976079
0.464825795 0.056534222
0.472055544 0.056588119
0.479283691 0.056693547
0.486498957 0.057129304
0.49368506 0.05790959
0.500844325 0.058914934
0.50798385 0.060049501
0.515104939 0.061295283
0.52220015 0.062676572
0.529263775 0.064217733
0.536291905 0.065910609
0.543290448 0.067720913
0.550269595 0.069610669
0.557230293 0.07155926
0.564171667 0.073579541
0.571081386 0.075704098
0.577946843 0.077968044
0.584757992 0.080389027
0.591516764 0.082955414
0.598232908 0.085630276
0.604923956 0.088367379
0.611605951 0.091124054
0.618292552 0.093874564
0.624985573 0.09660688
0.631686265 0.099318512
0.638398316 0.102007956
0.645121094 0.104663772
0.651864561 0.10727125
0.658630757 0.109813548
0.665423814 0.112284913
0.672239818 0.114695255
0.679068259 0.117071303
0.685895646 0.119448591
0.692709756 0.121861837
0.699502515 0.124335229
0.706270674 0.126877082
0.713014728 0.129482594
0.719738187 0.132139049
0.726446623 0.134830958
0.733147367 0.13754411
0.73984506 0.140264951
0.746544342 0.142981877
0.753248865 0.145685025
0.75996309 0.148367125
0.766687722 0.151021631
0.773424124 0.153644361
0.780173392 0.156232971
0.784920726 0.158029794
];

flap2 = [
0.996279887 0.287802774
0.999990588 0.289758316
0.99535485 0.287316494
0.990714744 0.284882984
0.986073631 0.282451392
0.981436941 0.280011383
0.976809717 0.277553475
0.972194554 0.275074587
0.967585692 0.272580825
0.962975707 0.270090725
0.95835188 0.26762645
0.953703091 0.265209637
0.949022249 0.262855537
0.944307139 0.260570841
0.939558891 0.258355857
0.934780145 0.256207385
0.929973802 0.254121368
0.925142446 0.252093946
0.92028882 0.250120408
0.915416424 0.248193686
0.91052993 0.246303049
0.905635049 0.244434677
0.900736812 0.242574394
0.895839649 0.240711591
0.890945095 0.238841791
0.886052464 0.236966864
0.881159902 0.235091754
0.876265826 0.233220824
0.871369982 0.231354742
0.866473398 0.229490629
0.861577378 0.227624726
0.856682473 0.225755321
0.851787897 0.223884795
0.846892052 0.222017993
0.841993941 0.2201585
0.837094261 0.218304751
0.832194127 0.216447798
0.827299497 0.21457828
0.822411612 0.212691248
0.817527357 0.210794707
0.812638505 0.208910146
0.807736894 0.207059018
0.802821374 0.20524514
0.797902771 0.203439631
0.79300032 0.201590811
0.788124363 0.199673201
0.783251078 0.197748822
0.778342926 0.195915212
0.773453183 0.19403124
0.768680606 0.191900663
0.765749211 0.187730177
0.768505277 0.183696348
0.773643876 0.183120393
0.778761368 0.184226353
0.783838478 0.185520811
0.788910368 0.186835065
0.793944315 0.188287473
0.798933381 0.189888867
0.803888039 0.191591583
0.808822572 0.193352879
0.813740144 0.195161279
0.818636755 0.197025512
0.823507004 0.198957554
0.828349586 0.200957945
0.833168699 0.203014267
0.837970971 0.205109581
0.842761246 0.207232341
0.847538551 0.209384044
0.852296737 0.211577649
0.857027445 0.213829879
0.861723801 0.216152864
0.866384581 0.218546445
0.87101557 0.22099723
0.875627163 0.223484307
0.880230756 0.225986221
0.884834663 0.228487542
0.889442735 0.230981181
0.894055986 0.233465221
0.898674857 0.235938801
0.903301249 0.23839828
0.907938908 0.24083643
0.912591686 0.243245615
0.91726146 0.245621656
0.921946485 0.247967519
0.926640975 0.250294387
0.931336901 0.252618357
0.936026058 0.254955944
0.940702097 0.257319658
0.945362033 0.259714957
0.950006087 0.262140906
0.954636738 0.264592337
0.959257642 0.267062128
0.963872552 0.269543088
0.968484946 0.272028703
0.973097932 0.274513271
0.977714087 0.276991944
0.982335474 0.279460843
0.986963614 0.281917038
0.991599537 0.284358489
0.996243837 0.286783993
0.999968527 0.288714167
];

%% === Step 3: Bézier Evaluation Function ===


function pts = bezier_eval(ctrl, t)
n = size(ctrl,1)-1;
pts = zeros(length(t),2);
for i=0:n
coeff = nchoosek(n,i)*(1-t).^(n-i).*t.^i;
coeff = coeff(:);
pts(:,1) = pts(:,1) + coeff*ctrl(i+1,1);
pts(:,2) = pts(:,2) + coeff*ctrl(i+1,2);
end
end

%% === Step 4: Rotation Function ===


function rotated = rotate_about_point(points, origin, theta_deg)
theta = deg2rad(theta_deg);
R = [cos(theta) -sin(theta); sin(theta) cos(theta)];
translated = points - origin;
rotated = (R * translated')' + origin;
end

%% === Step 5: Plot and Save Function ===


function plot_save_bezier(upper_bez, lower_bez, flap1, flap2, title_str, filename)
figure('Visible','off'); hold on; axis equal; grid on;
plot(upper_bez(:,1), upper_bez(:,2),'r','LineWidth',2);
plot(lower_bez(:,1), lower_bez(:,2),'b','LineWidth',2);
plot(flap1(:,1), flap1(:,2),'k','LineWidth',1.2);
plot(flap2(:,1), flap2(:,2),'k','LineWidth',1.2);
title(title_str); xlabel('x/c'); ylabel('y/c');
saveas(gcf,[filename,'.png']); close;
end

%% === Step 6: Common Parameters ===


factors = [0.5, 0.75, 1.25, 1.5];
upper_mod_idx = [5,6,7];
lower_mod_idx = [6,8,9];
t = linspace(0,1,50);
origin = [9.4866e-05 -0.0011563];

%% === Step 7: Rotate Original CPs by +3° ===


upper_rot = rotate_about_point(upper_cp, origin, 3);
lower_rot = rotate_about_point(lower_cp, origin, 3);

% Evaluate and save rotated-only geometry


upper_bez = bezier_eval(upper_rot, t);
lower_bez = bezier_eval(lower_rot, t);
data_to_save = [upper_bez; lower_bez; flap1; flap2];
writematrix(data_to_save, 'Set1_RotatedOnly.txt', 'Delimiter','tab');
plot_save_bezier(upper_bez, lower_bez, flap1, flap2, 'Rotated +3° only',
'Set1_RotatedOnly');

disp('=== Rotated Main Element Control Points ===');


disp('Upper Surface:'); disp(upper_rot);
disp('Lower Surface:'); disp(lower_rot);

%% === Step 8: CASE 1: Upper CP modification (after rotation) ===


for f = factors
tmp_upper = upper_rot;
tmp_upper(upper_mod_idx,2) = tmp_upper(upper_mod_idx,2) * f;

upper_bez = bezier_eval(tmp_upper, t);


lower_bez = bezier_eval(lower_rot, t);

data_to_save = [upper_bez; lower_bez; flap1; flap2];


filename_txt = ['Set1_Rotated_UpperFactor_',num2str(f)];
writematrix(data_to_save, [filename_txt,'.txt'],'Delimiter','tab');
plot_save_bezier(upper_bez, lower_bez, flap1, flap2, ...
['Rotated + Upper CP modified by factor ',num2str(f)], filename_txt);

disp(['=== Upper modified (factor ',num2str(f),') ===']);


disp(tmp_upper);
end

%% === CASE 2: Lower CP modification (after rotation) ===


for f = factors
tmp_lower = lower_rot;
tmp_lower(lower_mod_idx,2) = tmp_lower(lower_mod_idx,2) * f;

upper_bez = bezier_eval(upper_rot, t);


lower_bez = bezier_eval(tmp_lower, t);

data_to_save = [upper_bez; lower_bez; flap1; flap2];


filename_txt = ['Set1_Rotated_LowerFactor_',num2str(f)];
writematrix(data_to_save, [filename_txt,'.txt'],'Delimiter','tab');
plot_save_bezier(upper_bez, lower_bez, flap1, flap2, ...
['Rotated + Lower CP modified by factor ',num2str(f)], filename_txt);

disp(['=== Lower modified (factor ',num2str(f),') ===']);


disp(tmp_lower);
end

%% === CASE 3: Upper + Lower CP modification (after rotation) ===


for f = factors
tmp_upper = upper_rot;
tmp_lower = lower_rot;
tmp_upper(upper_mod_idx,2) = tmp_upper(upper_mod_idx,2) * f;
tmp_lower(lower_mod_idx,2) = tmp_lower(lower_mod_idx,2) * f;

upper_bez = bezier_eval(tmp_upper, t);


lower_bez = bezier_eval(tmp_lower, t);

data_to_save = [upper_bez; lower_bez; flap1; flap2];


filename_txt = ['Set1_Rotated_UpperLowerFactor_',num2str(f)];
writematrix(data_to_save, [filename_txt,'.txt'],'Delimiter','tab');
plot_save_bezier(upper_bez, lower_bez, flap1, flap2, ...
['Rotated + Upper & Lower CP modified by factor ',num2str(f)],
filename_txt);

disp(['=== Upper + Lower modified (factor ',num2str(f),') ===']);


disp('Upper Surface:'); disp(tmp_upper);
disp('Lower Surface:'); disp(tmp_lower);
end

You might also like