# Convert decimal and negative values ​​to integers

3 ビュー (過去 30 日間)
Lev Mihailov 2022 年 7 月 4 日

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
##### 12 件のコメント表示非表示 11 件の古いコメント
Lev Mihailov 2022 年 7 月 4 日
@Dyuman Joshi take min and max values, create an array, from -5.4 ; 1.2 to 4.5, fill array from 1 to n(up to 4), where 1 is the smallest value and 4 is the maximum

サインインしてコメントする。

### 回答 (2 件)

Matt J 2022 年 7 月 4 日
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 件のコメント表示非表示 -1 件の古いコメント

サインインしてコメントする。

Rik 2022 年 7 月 4 日
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:
1. Have a linear lookup table. This will map all numbers lineraly to the closest integer.
2. 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)
ans = 1×3
1 2 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

サインインしてコメントする。

R2021a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by