Convert decimal and negative values to integers
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
There are x and y coordinates that I need to convert to integer values while preserving the meaning of the graph
a = 0:pi/100:2*pi;
x=cos(a);
y = sin(x);
plot(x,y) % first graph
% plot(a,y) % second graph
Thanks in advance
12 Kommentare
Dyuman Joshi
am 4 Jul. 2022
Ok. So, What is it that you are trying to do in the first place? How did you come up with the conversions you mentioned above?
Antworten (2)
Matt J
am 4 Jul. 2022
Something like this, perhaps?
a = 0:pi/100:2*pi;
x=cos(a);
y = sin(x);
fcn=@(z)round(rescale(z,0,intmax('uint16')));
plot(fcn(a),fcn(y))
0 Kommentare
Rik
am 4 Jul. 2022
Since all your values are between -1 and 1, you need a method to discretize your data to some arbitrary (but repeatable) indices. You have two general options:
- Have a linear lookup table. This will map all numbers lineraly to the closest integer.
- Have a non-linear lookup table. This allows you to decide what data ranges should have more precision.
Below I will implement the simplest version of option 1 I can think of. If you want to increase performance, interp1 may be required.
discretize_values([-1 0 1],3)
Now we can apply this to your curve. What I show here is how you can set the precision to influence how jagged your graph will look. Set a higher number for a smoother curve. The mapping back to non-integers should of course be removed if you are planning to use this for indexing.
a=linspace(0,2*pi,200);x=cos(a);y=sin(a);
plot(a,y)
hold on
precision=20;
y2=discretize_values(y,precision);
y2=2*((y2-1)/(precision-1))-1; % map back to non-integers
plot(a,y2)
hold off
function out=discretize_values(in,precision)
% map (-1,1) to 1:precision
if any(in>1) || any(in<-1)
error('data outside expected range')
end
out=1+round((precision-1)*(in+1)/2);
end
0 Kommentare
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!